home *** CD-ROM | disk | FTP | other *** search
/ Ultra Pack / UltraComputing Partner Applications.iso / SunLabs / tclTK / src / tk4.0 / tests / textDisp.test < prev    next >
Text File  |  1995-06-28  |  89KB  |  2,756 lines

  1. # This file is a Tcl script to test the code in the file tkTextDisp.c.
  2. # This file is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1994 The Regents of the University of California.
  5. # Copyright (c) 1994-1995 Sun Microsystems, Inc.
  6. #
  7. # See the file "license.terms" for information on usage and redistribution
  8. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9. #
  10. # @(#) textDisp.test 1.31 95/06/28 14:52:03
  11.  
  12. if {[string compare test [info procs test]] == 1} then \
  13.   {source defs}
  14.  
  15. # The procedure below is used as the scrolling command for the text;
  16. # it just saves the scrolling information in a variable "scrollInfo".
  17.  
  18. proc scroll args {
  19.     global scrollInfo
  20.     set scrollInfo $args
  21. }
  22.  
  23. # The procedure below is used to generate errors during scrolling commands.
  24.  
  25. proc scrollError args {
  26.     error "scrolling error"
  27. }
  28.  
  29. # The frame .f is needed to make sure that the overall window is always
  30. # fairly wide, even if the text window is very narrow.  This is needed
  31. # because some window managers don't allow the overall width of a window
  32. # to get very narrow.
  33.  
  34. foreach i [winfo child .] {
  35.     destroy $i
  36. }
  37. frame .f -width 100 -height 20
  38. pack append . .f left
  39. set fixedFont -adobe-courier-medium-r-normal--12-120-75-75-m-*-iso8859-1
  40. set varFont -adobe-times-medium-r-normal--14-140-75-75-p-*-iso8859-1
  41. set bigFont -adobe-helvetica-medium-r-normal--24-240-75-75-p-*-iso8859-1
  42. if [catch {text .t -font $fixedFont -width 20 -height 10 \
  43.     -yscrollcommand scroll} msg] {
  44.     puts "The font needed by these tests isn't available, so I'm"
  45.     puts "going to skip the tests."
  46.     return
  47. }
  48. pack append . .t {top expand fill}
  49. .t tag configure big -font $bigFont
  50. .t debug on
  51. wm geometry . {}
  52.   
  53. # The statements below reset the main window;  it's needed if the window
  54. # manager is mwm to make mwm forget about a previous minimum size setting.
  55.  
  56. wm withdraw .
  57. wm minsize . 1 1
  58. wm positionfrom . user
  59. wm deiconify .
  60. update
  61.  
  62. # Some window managers (like olwm under SunOS 4.1.3) misbehave in a way
  63. # that tends to march windows off the top and left of the screen.  If
  64. # this happens, some tests will fail because parts of the window will
  65. # not need to be displayed (because they're off-screen).  To keep this
  66. # from happening, move the window if it's getting near the left or top
  67. # edges of the screen.
  68.  
  69. if {([winfo rooty .] < 50) || ([winfo rootx .] < 50)} {
  70.     wm geom . +50+50
  71. }
  72.  
  73. test textDisp-1.1 {GetStyle procedure, priorities and tab stops} {
  74.     .t delete 1.0 end
  75.     .t insert 1.0 "x\ty"
  76.     .t tag delete x y z
  77.     .t tag configure x -tabs {50}
  78.     .t tag configure y -foreground black
  79.     .t tag configure z -tabs {70}
  80.     .t tag add x 1.0 1.end
  81.     .t tag add y 1.0 1.end
  82.     .t tag add z 1.0 1.end
  83.     update idletasks
  84.     set x [lindex [.t bbox 1.2] 0]
  85.     .t tag configure z -tabs {}
  86.     lappend x [lindex [.t bbox 1.2] 0]
  87.     .t tag configure z -tabs {30}
  88.     .t tag raise x
  89.     update idletasks
  90.     lappend x [lindex [.t bbox 1.2] 0]
  91. } {75 55 55}
  92. .t tag delete x y z
  93. test textDisp-1.2 {GetStyle procedure, wrapmode} {
  94.     .t configure -wrap char
  95.     .t delete 1.0 end
  96.     .t insert 1.0 "abcd\nefg hijkl mnop qrstuv wxyz"
  97.     .t tag configure x -wrap word
  98.     .t tag configure y -wrap none
  99.     .t tag raise y
  100.     update
  101.     set result [list [.t bbox 2.20]]
  102.     .t tag add x 2.0 2.1
  103.     lappend result [.t bbox 2.20]
  104.     .t tag add y 1.end 2.2
  105.     lappend result [.t bbox 2.20]
  106. } {{5 31 7 13} {40 31 7 13} {}}
  107. .t tag delete x y
  108.  
  109. test textDisp-2.1 {LayoutDLine, basics} {
  110.     .t configure -wrap char
  111.     .t delete 1.0 end
  112.     .t insert 1.0 "This is some sample text for testing."
  113.     list [.t bbox 1.19] [.t bbox 1.20]
  114. } {{138 5 7 13} {5 18 7 13}}
  115. test textDisp-2.2 {LayoutDLine, basics} {
  116.     .t configure -wrap char
  117.     .t delete 1.0 end
  118.     .t insert 1.0 "This isx some sample text for testing."
  119.     list [.t bbox 1.19] [.t bbox 1.20]
  120. } {{138 5 7 13} {5 18 7 13}}
  121. test textDisp-2.3 {LayoutDLine, basics} {
  122.     .t configure -wrap char
  123.     .t delete 1.0 end
  124.     .t insert 1.0 "This isxxx some sample text for testing."
  125.     list [.t bbox 1.19] [.t bbox 1.20]
  126. } {{138 5 7 13} {5 18 7 13}}
  127. test textDisp-2.4 {LayoutDLine, word wrap} {
  128.     .t configure -wrap word
  129.     .t delete 1.0 end
  130.     .t insert 1.0 "This is some sample text for testing."
  131.     list [.t bbox 1.19] [.t bbox 1.20]
  132. } {{138 5 7 13} {5 18 7 13}}
  133. test textDisp-2.5 {LayoutDLine, word wrap} {
  134.     .t configure -wrap word
  135.     .t delete 1.0 end
  136.     .t insert 1.0 "This isx some sample text for testing."
  137.     list [.t bbox 1.13] [.t bbox 1.14] [.t bbox 1.19]
  138. } {{96 5 49 13} {5 18 7 13} {40 18 7 13}}
  139. test textDisp-2.6 {LayoutDLine, word wrap} {
  140.     .t configure -wrap word
  141.     .t delete 1.0 end
  142.     .t insert 1.0 "This isxxx some sample text for testing."
  143.     list [.t bbox 1.15] [.t bbox 1.16]
  144. } {{110 5 35 13} {5 18 7 13}}
  145. test textDisp-2.7 {LayoutDLine, marks and tags} {
  146.     .t configure -wrap word
  147.     .t delete 1.0 end
  148.     .t insert 1.0 "This isxxx some sample text for testing."
  149.     .t tag add foo 1.4 1.6
  150.     .t mark set insert 1.8
  151.     list [.t bbox 1.2] [.t bbox 1.5] [.t bbox 1.11]
  152. } {{19 5 7 13} {40 5 7 13} {82 5 7 13}}
  153. foreach m [.t mark names] {
  154.     catch {.t mark unset $m}
  155. }
  156. scan [wm geom .] %dx%d width height
  157. test textDisp-2.8 {LayoutDLine, extra chunk at end of dline} {
  158.     wm geom . [expr $width+1]x$height
  159.     update
  160.     .t configure -wrap char
  161.     .t delete 1.0 end
  162.     .t insert 1.0 "This isxx some sample text for testing."
  163.     .t mark set foo 1.20
  164.     list [.t bbox 1.19] [.t bbox 1.20]
  165. } {{138 5 8 13} {5 18 7 13}}
  166. wm geom . {}
  167. update
  168. test textDisp-2.9 {LayoutDLine, marks and tags} {
  169.     .t configure -wrap word
  170.     .t delete 1.0 end
  171.     .t insert 1.0 "This is a very_very_long_word_that_wraps."
  172.     list [.t bbox 1.9] [.t bbox 1.10] [.t bbox 1.25]
  173. } {{68 5 77 13} {5 18 7 13} {110 18 7 13}}
  174. test textDisp-2.10 {LayoutDLine, marks and tags} {
  175.     .t configure -wrap word
  176.     .t delete 1.0 end
  177.     .t insert 1.0 "This is a very_very_long_word_that_wraps."
  178.     .t tag add foo 1.13
  179.     .t tag add foo 1.15
  180.     .t tag add foo 1.17
  181.     .t tag add foo 1.19
  182.     list [.t bbox 1.9] [.t bbox 1.10] [.t bbox 1.25]
  183. } {{68 5 77 13} {5 18 7 13} {110 18 7 13}}
  184. test textDisp-2.11 {LayoutDLine, newline width} {
  185.     .t configure -wrap char
  186.     .t delete 1.0 end
  187.     .t insert 1.0 "a\nbb\nccc\ndddd"
  188.     list [.t bbox 2.2] [.t bbox 3.3]
  189. } {{19 18 126 13} {26 31 119 13}}
  190. test textDisp-2.12 {LayoutDLine, justification} {
  191.     .t configure -wrap char
  192.     .t delete 1.0 end
  193.     .t insert 1.0 "\na\nbb\nccc\ndddd"
  194.     .t tag configure x -justify center
  195.     .t tag add x 1.0 end
  196.     .t tag add y 3.0 3.2
  197.     list [.t bbox 1.0] [.t bbox 2.0] [.t bbox 4.0] [.t bbox 4.2]
  198. } {{75 5 70 13} {71 18 7 13} {64 44 7 13} {78 44 7 13}}
  199. test textDisp-2.13 {LayoutDLine, justification} {
  200.     .t configure -wrap char
  201.     .t delete 1.0 end
  202.     .t insert 1.0 "\na\nbb\nccc\ndddd"
  203.     .t tag configure x -justify right
  204.     .t tag add x 1.0 end
  205.     .t tag add y 3.0 3.2
  206.     list [.t bbox 1.0] [.t bbox 2.0] [.t bbox 4.0] [.t bbox 4.2]
  207. } {{145 5 0 13} {138 18 7 13} {124 44 7 13} {138 44 7 13}}
  208. test textDisp-2.14 {LayoutDLine, justification} {
  209.     .t configure -wrap char
  210.     .t delete 1.0 end
  211.     .t insert 1.0 "\na\nbb\nccc\ndddd"
  212.     .t tag configure x -justify center
  213.     .t tag add x 2.0 3.1
  214.     .t tag configure y -justify right
  215.     .t tag add y 3.0 4.0
  216.     .t tag raise y
  217.     list [.t bbox 2.0] [.t bbox 3.0] [.t bbox 3.end] [.t bbox 4.0]
  218. } {{71 18 7 13} {131 31 7 13} {145 31 0 13} {5 44 7 13}}
  219. test textDisp-2.15 {LayoutDLine, justification} {
  220.     .t configure -wrap char
  221.     .t delete 1.0 end
  222.     .t insert 1.0 "\na\nbb\nccc\ndddd"
  223.     .t tag configure x -justify center
  224.     .t tag add x 2.0 3.1
  225.     .t tag configure y -justify right
  226.     .t tag add y 3.0 4.0
  227.     .t tag lower y
  228.     list [.t bbox 2.0] [.t bbox 3.0] [.t bbox 3.end] [.t bbox 4.0]
  229. } {{71 18 7 13} {68 31 7 13} {82 31 63 13} {5 44 7 13}}
  230. test textDisp-2.16 {LayoutDLine, justification} {
  231.     .t configure -wrap word
  232.     .t delete 1.0 end
  233.     .t insert 1.0 "Lots of long words, enough to force word wrap\nThen\nmore lines"
  234.     .t tag configure x -justify center
  235.     .t tag add x 1.1 1.20
  236.     .t tag add x 1.21 1.end
  237.     list [.t bbox 1.0] [.t bbox 1.20] [.t bbox 1.36] [.t bbox 2.0]
  238. } {{5 5 7 13} {5 18 7 13} {43 31 7 13} {5 44 7 13}}
  239. test textDisp-2.17 {LayoutDLine, justification} {
  240.     .t configure -wrap word
  241.     .t delete 1.0 end
  242.     .t insert 1.0 "Lots of long words, enough to force word wrap\nThen\nmore lines"
  243.     .t tag configure x -justify center
  244.     .t tag add x 1.20
  245.     list [.t bbox 1.0] [.t bbox 1.20] [.t bbox 1.36] [.t bbox 2.0]
  246. } {{5 5 7 13} {19 18 7 13} {5 31 7 13} {5 44 7 13}}
  247. test textDisp-2.18 {LayoutDLine, justification} {
  248.     .t configure -wrap none
  249.     .t delete 1.0 end
  250.     .t insert 1.0 "Lots of long words, enough to extend out of the window\n"
  251.     .t insert end "Then\nmore lines\nThat are shorter"
  252.     .t tag configure x -justify center
  253.     .t tag configure y -justify right
  254.     .t tag add x 2.0
  255.     .t tag add y 3.0
  256.     .t xview scroll 5 units
  257.     list [.t bbox 2.0] [.t bbox 3.0]
  258. } {{26 18 7 13} {40 31 7 13}}
  259. .t tag delete x
  260. .t tag delete y
  261. test textDisp-2.19 {LayoutDLine, margins} {
  262.     .t configure -wrap word
  263.     .t delete 1.0 end
  264.     .t insert 1.0 "Lots of long words, enough to force word wrap\nThen\nmore lines"
  265.     .t tag configure x -lmargin1 20 -lmargin2 40 -rmargin 15
  266.     .t tag add x 1.0 end
  267.     list [.t bbox 1.0] [.t bbox 1.12] [.t bbox 1.13] [.t bbox 2.0]
  268. } {{25 5 7 13} {109 5 36 13} {45 18 7 13} {25 70 7 13}}
  269. test textDisp-2.20 {LayoutDLine, margins} {
  270.     .t configure -wrap word
  271.     .t delete 1.0 end
  272.     .t insert 1.0 "Lots of long words, enough to force word wrap\nThen\nmore lines"
  273.     .t tag configure x -lmargin1 20 -lmargin2 10 -rmargin 3
  274.     .t tag configure y -lmargin1 15 -lmargin2 5 -rmargin 0
  275.     .t tag raise y
  276.     .t tag add x 1.0 end
  277.     .t tag add y 1.13
  278.     list [.t bbox 1.0] [.t bbox 1.13] [.t bbox 1.30] [.t bbox 2.0]
  279. } {{25 5 7 13} {10 18 7 13} {15 31 7 13} {25 44 7 13}}
  280. test textDisp-2.21 {LayoutDLine, margins} {
  281.     .t configure -wrap word
  282.     .t delete 1.0 end
  283.     .t insert 1.0 "Sample text"
  284.     .t tag configure x -lmargin1 80 -lmargin2 80 -rmargin 100
  285.     .t tag add x 1.0 end
  286.     list [.t bbox 1.0] [.t bbox 1.1] [.t bbox 1.2]
  287. } {{85 5 60 13} {85 18 60 13} {85 31 60 13}}
  288. .t tag delete x
  289. .t tag delete y
  290. test textDisp-2.22 {LayoutDLine, spacing options} {
  291.     .t configure -wrap word
  292.     .t delete 1.0 end
  293.     .t tag delete x y
  294.     .t insert end "Short line\nLine 2 is long enough "
  295.     .t insert end "to wrap around a couple of times"
  296.     .t insert end "\nLine 3\nLine 4"
  297.     set i [.t dlineinfo 1.0]
  298.     set b1 [expr [lindex $i 1] + [lindex $i 4]]
  299.     set i [.t dlineinfo 2.0]
  300.     set b2 [expr [lindex $i 1] + [lindex $i 4]]
  301.     set i [.t dlineinfo 2.end]
  302.     set b3 [expr [lindex $i 1] + [lindex $i 4]]
  303.     set i [.t dlineinfo 3.0]
  304.     set b4 [expr [lindex $i 1] + [lindex $i 4]]
  305.     .t configure -spacing1 2 -spacing2 1 -spacing3 3
  306.     set i [.t dlineinfo 1.0]
  307.     set b1 [expr [lindex $i 1] + [lindex $i 4] - $b1]
  308.     set i [.t dlineinfo 2.0]
  309.     set b2 [expr [lindex $i 1] + [lindex $i 4] - $b2]
  310.     set i [.t dlineinfo 2.end]
  311.     set b3 [expr [lindex $i 1] + [lindex $i 4] - $b3]
  312.     set i [.t dlineinfo 3.0]
  313.     set b4 [expr [lindex $i 1] + [lindex $i 4] - $b4]
  314.     list $b1 $b2 $b3 $b4
  315. } {2 7 10 15}
  316. .t configure -spacing1 0 -spacing2 0 -spacing3 0
  317. test textDisp-2.23 {LayoutDLine, spacing options} {
  318.     .t configure -wrap word
  319.     .t delete 1.0 end
  320.     .t tag delete x y
  321.     .t insert end "Short line\nLine 2 is long enough "
  322.     .t insert end "to wrap around a couple of times"
  323.     .t insert end "\nLine 3\nLine 4"
  324.     set i [.t dlineinfo 1.0]
  325.     set b1 [expr [lindex $i 1] + [lindex $i 4]]
  326.     set i [.t dlineinfo 2.0]
  327.     set b2 [expr [lindex $i 1] + [lindex $i 4]]
  328.     set i [.t dlineinfo 2.end]
  329.     set b3 [expr [lindex $i 1] + [lindex $i 4]]
  330.     set i [.t dlineinfo 3.0]
  331.     set b4 [expr [lindex $i 1] + [lindex $i 4]]
  332.     .t configure -spacing1 4 -spacing2 4 -spacing3 4
  333.     .t tag configure x -spacing1 1 -spacing2 2 -spacing3 3
  334.     .t tag add x 1.0 end
  335.     .t tag configure y -spacing1 0 -spacing2 3
  336.     .t tag add y 2.19 end
  337.     .t tag raise y
  338.     set i [.t dlineinfo 1.0]
  339.     set b1 [expr [lindex $i 1] + [lindex $i 4] - $b1]
  340.     set i [.t dlineinfo 2.0]
  341.     set b2 [expr [lindex $i 1] + [lindex $i 4] - $b2]
  342.     set i [.t dlineinfo 2.end]
  343.     set b3 [expr [lindex $i 1] + [lindex $i 4] - $b3]
  344.     set i [.t dlineinfo 3.0]
  345.     set b4 [expr [lindex $i 1] + [lindex $i 4] - $b4]
  346.     list $b1 $b2 $b3 $b4
  347. } {1 5 13 16}
  348. .t configure -spacing1 0 -spacing2 0 -spacing3 0
  349. test textDisp-2.24 {LayoutDLine, tabs, saving from first chunk} {
  350.     .t delete 1.0 end
  351.     .t tag delete x y
  352.     .t tag configure x -tabs 70
  353.     .t tag configure y -tabs 80
  354.     .t insert 1.0 "ab\tcde"
  355.     .t tag add x 1.0 end
  356.     .t tag add y 1.1 end
  357.     lindex [.t bbox 1.3] 0
  358. } {75}
  359. test textDisp-2.25 {LayoutDLine, tabs, breaking chunks at tabs} {
  360.     .t delete 1.0 end
  361.     .t tag delete x
  362.     .t tag configure x -tabs {30 60 90 120}
  363.     .t insert 1.0 "a\tb\tc\td\te"
  364.     .t mark set dummy1 1.1
  365.     .t mark set dummy2 1.2
  366.     .t tag add x 1.0 end
  367.     list [lindex [.t bbox 1.2] 0] [lindex [.t bbox 1.4] 0] \
  368.         [lindex [.t bbox 1.6] 0] [lindex [.t bbox 1.8] 0]
  369. } {35 65 95 125}
  370. test textDisp-2.26 {LayoutDLine, tabs, breaking chunks at tabs} {
  371.     .t delete 1.0 end
  372.     .t tag delete x
  373.     .t tag configure x -tabs {30 60 90 120} -justify right
  374.     .t insert 1.0 "a\tb\tc\td\te"
  375.     .t mark set dummy1 1.1
  376.     .t mark set dummy2 1.2
  377.     .t tag add x 1.0 end
  378.     list [lindex [.t bbox 1.2] 0] [lindex [.t bbox 1.4] 0] \
  379.         [lindex [.t bbox 1.6] 0] [lindex [.t bbox 1.8] 0]
  380. } {117 124 131 138}
  381. test textDisp-2.27 {LayoutDLine, tabs, calling AdjustForTab} {
  382.     .t delete 1.0 end
  383.     .t tag delete x
  384.     .t tag configure x -tabs {30 60}
  385.     .t insert 1.0 "a\tb\tcd"
  386.     .t tag add x 1.0 end
  387.     list [lindex [.t bbox 1.2] 0] [lindex [.t bbox 1.4] 0]
  388. } {35 65}
  389. test textDisp-2.28 {LayoutDLine, tabs, running out of space in dline} {
  390.     .t delete 1.0 end
  391.     .t insert 1.0 "a\tb\tc\td"
  392.     .t bbox 1.6
  393. } {5 18 7 13}
  394. test textDisp-2.29 {LayoutDLine, tabs, running out of space in dline} {
  395.     .t delete 1.0 end
  396.     .t insert 1.0 "a\tx\tabcd"
  397.     .t bbox 1.4
  398. } {117 5 7 13}
  399. test textDisp-2.30 {LayoutDLine, tabs, running out of space in dline} {
  400.     .t delete 1.0 end
  401.     .t insert 1.0 "a\tx\tabc"
  402.     .t bbox 1.4
  403. } {117 5 7 13}
  404.  
  405. test textDisp-3.1 {different character sizes} {
  406.     .t configure -wrap word
  407.     .t delete 1.0 end
  408.     .t insert end "Some sample text, including both large\n"
  409.     .t insert end "characters and\nsmall\n"
  410.     .t insert end "abc\nd\ne\nfghij"
  411.     .t tag add big 1.5 1.10
  412.     .t tag add big 2.11 2.14
  413.     list [.t bbox 1.1] [.t bbox 1.6] [.t dlineinfo 1.0] [.t dlineinfo 3.0]
  414. } {{12 17 7 13} {52 5 13 27} {5 5 114 27 22} {5 85 35 13 10}}
  415.  
  416. .t configure -wrap char
  417. test textDisp-4.1 {UpdateDisplayInfo, basic} {
  418.     .t delete 1.0 end
  419.     .t insert end "Line 1\nLine 2\nLine 3\n"
  420.     update
  421.     .t delete 2.0 2.end
  422.     .t insert 2.0 "New Line 2"
  423.     update
  424.     list [.t bbox 1.0] [.t bbox 2.0] [.t bbox 3.0] $tk_textRelayout
  425. } {{5 5 7 13} {5 18 7 13} {5 31 7 13} 2.0}
  426. test textDisp-4.2 {UpdateDisplayInfo, re-use tail of text line} {
  427.     .t delete 1.0 end
  428.     .t insert end "Line 1\nLine 2 is so long that it wraps around\nLine 3"
  429.     update
  430.     .t mark set x 2.21
  431.     .t delete 2.2
  432.     .t insert 2.0 X
  433.     update
  434.     list [.t bbox 2.0] [.t bbox x] [.t bbox 3.0] $tk_textRelayout
  435. } {{5 18 7 13} {12 31 7 13} {5 44 7 13} {2.0 2.20}}
  436. test textDisp-4.3 {UpdateDisplayInfo, tail of text line shifts} {
  437.     .t delete 1.0 end
  438.     .t insert end "Line 1\nLine 2 is so long that it wraps around\nLine 3"
  439.     update
  440.     .t mark set x 2.21
  441.     .t delete 2.2
  442.     update
  443.     list [.t bbox 2.0] [.t bbox x] [.t bbox 3.0] $tk_textRelayout
  444. } {{5 18 7 13} {5 31 7 13} {5 44 7 13} {2.0 2.20}}
  445. .t mark unset x
  446. test textDisp-4.4 {UpdateDisplayInfo, wrap-mode "none"} {
  447.     .t configure -wrap none
  448.     .t delete 1.0 end
  449.     .t insert end "Line 1\nLine 2 is so long that it wraps around\nLine 3"
  450.     update
  451.     list [.t bbox 2.0] [.t bbox 2.25] [.t bbox 3.0] $tk_textRelayout
  452. } {{5 18 7 13} {} {5 31 7 13} {1.0 2.0 3.0}}
  453. test textDisp-4.5 {UpdateDisplayInfo, tiny window} {
  454.     wm geom . 103x$height
  455.     update
  456.     .t configure -wrap none
  457.     .t delete 1.0 end
  458.     .t insert end "Line 1\nLine 2 is so long that it wraps around\nLine 3"
  459.     update
  460.     list [.t bbox 2.0] [.t bbox 2.1] [.t bbox 3.0] $tk_textRelayout
  461. } {{5 18 1 13} {} {5 31 1 13} {1.0 2.0 3.0}}
  462. test textDisp-4.6 {UpdateDisplayInfo, tiny window} {
  463.     frame .f2 -width 20 -height 100
  464.     pack before .f .f2 top
  465.     wm geom . 103x103
  466.     update
  467.     .t configure -wrap none -borderwidth 2
  468.     .t delete 1.0 end
  469.     .t insert end "Line 1\nLine 2 is so long that it wraps around\nLine 3"
  470.     update
  471.     list [.t bbox 1.0] [.t bbox 2.0] $tk_textRelayout
  472. } {{5 5 1 1} {} 1.0}
  473. catch {destroy .f2}
  474. .t configure -borderwidth 0 -wrap char
  475. wm geom . {}
  476. update
  477. test textDisp-4.7 {UpdateDisplayInfo, filling in extra vertical space} {
  478.     .t delete 1.0 end
  479.     .t insert end "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17"
  480.     .t yview 1.0
  481.     update
  482.     .t yview 16.0
  483.     update
  484.     list [.t index @0,0] $tk_textRelayout $tk_textRedraw
  485. } {8.0 {16.0 17.0 15.0 14.0 13.0 12.0 11.0 10.0 9.0 8.0} {8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0}}
  486. test textDisp-4.8 {UpdateDisplayInfo, filling in extra vertical space} {
  487.     .t delete 1.0 end
  488.     .t insert end "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17"
  489.     .t yview 16.0
  490.     update
  491.     .t delete 5.0 14.0
  492.     update
  493.     list [.t index @0,0] $tk_textRelayout $tk_textRedraw
  494. } {1.0 {5.0 4.0 3.0 2.0 1.0} {1.0 2.0 3.0 4.0 5.0 eof}}
  495. test textDisp-4.9 {UpdateDisplayInfo, filling in extra vertical space} {
  496.     .t delete 1.0 end
  497.     .t insert end "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17"
  498.     .t yview 16.0
  499.     update
  500.     .t delete 15.0 end
  501.     list [.t bbox 7.0] [.t bbox 12.0]
  502. } {{3 29 7 13} {3 94 7 13}}
  503. test textDisp-4.10 {UpdateDisplayInfo, filling in extra vertical space} {
  504.     .t delete 1.0 end
  505.     .t insert end "1\n2\n3\n4\n5\nLine 6 is such a long line that it wraps around.\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17"
  506.     .t yview end
  507.     update
  508.     .t delete 13.0 end
  509.     update
  510.     list [.t index @0,0] $tk_textRelayout $tk_textRedraw
  511. } {5.0 {12.0 7.0 6.40 6.20 6.0 5.0} {5.0 6.0 6.20 6.40 7.0 12.0}}
  512. test textDisp-4.11 {UpdateDisplayInfo, filling in extra vertical space} {
  513.     .t delete 1.0 end
  514.     .t insert end "1\n2\n3\n4\n5\nLine 6 is such a long line that it wraps around, not once but really quite a few times.\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17"
  515.     .t yview end
  516.     update
  517.     .t delete 14.0 end
  518.     update
  519.     list [.t index @0,0] $tk_textRelayout $tk_textRedraw
  520. } {6.40 {13.0 7.0 6.80 6.60 6.40} {6.40 6.60 6.80 7.0 13.0}}
  521. test textDisp-4.12 {UpdateDisplayInfo, filling in extra vertical space} {
  522.     .t delete 1.0 end
  523.     .t insert end "1\n2\n3\n4\n5\n7\n8\n9\n10\n11\n12"
  524.     button .b -text "Test"
  525.     .t window create 3.end -window .b
  526.     .t yview moveto 1
  527.     update
  528.     .t yview moveto 0
  529.     update
  530.     .t yview moveto 1
  531.     update
  532.     winfo ismapped .b
  533. } {0}
  534. .t configure -wrap word
  535. .t delete 1.0 end
  536. .t insert end "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\n"
  537. .t insert end "Line 8\nLine 9\nLine 10\nLine 11\nLine 12\nLine 13\n"
  538. .t insert end "Line 14\nLine 15\nLine 16"
  539. .t tag delete x
  540. .t tag configure x -relief raised -borderwidth 2 -background white
  541. test textDisp-4.13 {UpdateDisplayInfo, special handling for top/bottom lines} {
  542.     .t tag add x 1.0 end
  543.     .t yview 1.0
  544.     update
  545.     .t yview scroll 3 units
  546.     update
  547.     list $tk_textRelayout $tk_textRedraw
  548. } {{11.0 12.0 13.0} {4.0 10.0 11.0 12.0 13.0}}
  549. test textDisp-4.14 {UpdateDisplayInfo, special handling for top/bottom lines} {
  550.     .t tag remove x 1.0 end
  551.     .t yview 1.0
  552.     update
  553.     .t yview scroll 3 units
  554.     update
  555.     list $tk_textRelayout $tk_textRedraw
  556. } {{11.0 12.0 13.0} {11.0 12.0 13.0}}
  557. test textDisp-4.15 {UpdateDisplayInfo, special handling for top/bottom lines} {
  558.     .t tag add x 1.0 end
  559.     .t yview 4.0
  560.     update
  561.     .t yview scroll -2 units
  562.     update
  563.     list $tk_textRelayout $tk_textRedraw
  564. } {{2.0 3.0} {2.0 3.0 4.0 11.0}}
  565. test textDisp-4.16 {UpdateDisplayInfo, special handling for top/bottom lines} {
  566.     .t tag remove x 1.0 end
  567.     .t yview 4.0
  568.     update
  569.     .t yview scroll -2 units
  570.     update
  571.     list $tk_textRelayout $tk_textRedraw
  572. } {{2.0 3.0} {2.0 3.0}}
  573. test textDisp-4.17 {UpdateDisplayInfo, horizontal scrolling} {
  574.     .t configure -wrap none
  575.     .t delete 1.0 end
  576.     .t insert end "Short line 1\nLine 2 is long enough to scroll horizontally"
  577.     .t insert end "\nLine 3\nLine 4"
  578.     update
  579.     .t xview scroll 3 units
  580.     update
  581.     list $tk_textRelayout $tk_textRedraw [.t bbox 2.0] [.t bbox 2.5] \
  582.         [.t bbox 2.23]
  583. } {{} {1.0 2.0 3.0 4.0} {} {17 16 7 13} {}}
  584. test textDisp-4.18 {UpdateDisplayInfo, horizontal scrolling} {
  585.     .t configure -wrap none
  586.     .t delete 1.0 end
  587.     .t insert end "Short line 1\nLine 2 is long enough to scroll horizontally"
  588.     .t insert end "\nLine 3\nLine 4"
  589.     update
  590.     .t xview scroll 100 units
  591.     update
  592.     list $tk_textRelayout $tk_textRedraw [.t bbox 2.25]
  593. } {{} {1.0 2.0 3.0 4.0} {10 16 7 13}}
  594. test textDisp-4.19 {UpdateDisplayInfo, horizontal scrolling} {
  595.     .t configure -wrap none
  596.     .t delete 1.0 end
  597.     .t insert end "Short line 1\nLine 2 is long enough to scroll horizontally"
  598.     .t insert end "\nLine 3\nLine 4"
  599.     update
  600.     .t xview moveto 0
  601.     .t xview scroll -10 units
  602.     update
  603.     list $tk_textRelayout $tk_textRedraw [.t bbox 2.5]
  604. } {{} {1.0 2.0 3.0 4.0} {38 16 7 13}}
  605. test textDisp-4.20 {UpdateDisplayInfo, horizontal scrolling} {
  606.     .t configure -wrap none
  607.     .t delete 1.0 end
  608.     .t insert end "Short line 1\nLine 2 is long enough to scroll horizontally"
  609.     .t insert end "\nLine 3\nLine 4"
  610.     .t xview moveto 0.0
  611.     .t xview scroll 100 units
  612.     update
  613.     .t delete 2.30 2.44
  614.     update
  615.     list $tk_textRelayout $tk_textRedraw [.t bbox 2.25]
  616. } {2.0 {1.0 2.0 3.0 4.0} {108 16 7 13}}
  617. test textDisp-4.21 {UpdateDisplayInfo, horizontal scrolling} {
  618.     .t configure -wrap none
  619.     .t delete 1.0 end
  620.     .t insert end "Short line 1\nLine 2 is long enough to scroll horizontally"
  621.     .t insert end "\nLine 3\nLine 4"
  622.     .t xview moveto .9
  623.     update
  624.     .t xview moveto .6
  625.     update
  626.     list $tk_textRelayout $tk_textRedraw
  627. } {{} {}}
  628. test textDisp-4.22 {UpdateDisplayInfo, no horizontal scrolling except for -wrap none} {
  629.     .t configure -wrap none
  630.     .t delete 1.0 end
  631.     .t insert end "Short line 1\nLine 2 is long enough to scroll horizontally"
  632.     .t insert end "\nLine 3\nLine 4"
  633.     .t xview scroll 25 units
  634.     update
  635.     .t configure -wrap word
  636.     list [.t bbox 2.0] [.t bbox 2.16]
  637. } {{3 16 7 13} {10 29 7 13}}
  638. test textDisp-4.23 {UpdateDisplayInfo, no horizontal scrolling except for -wrap none} {
  639.     .t configure -wrap none
  640.     .t delete 1.0 end
  641.     .t insert end "Short line 1\nLine 2 is long enough to scroll horizontally"
  642.     .t insert end "\nLine 3\nLine 4"
  643.     .t xview scroll 25 units
  644.     update
  645.     .t configure -wrap char
  646.     list [.t bbox 2.0] [.t bbox 2.16]
  647. } {{3 16 7 13} {115 16 7 13}}
  648.  
  649. test textDisp-5.1 {DisplayDLine, handling of spacing} {
  650.     .t configure -wrap char
  651.     .t delete 1.0 end
  652.     .t insert 1.0 "abcdefghijkl\nmnopqrstuvwzyz"
  653.     .t tag configure spacing -spacing1 8 -spacing3 2
  654.     .t tag add spacing 1.0 end
  655.     frame .t.f1 -width 10 -height 4 -bg black
  656.     frame .t.f2 -width 10 -height 4 -bg black
  657.     frame .t.f3 -width 10 -height 4 -bg black
  658.     frame .t.f4 -width 10 -height 4 -bg black
  659.     .t window create 1.3 -window .t.f1 -align top
  660.     .t window create 1.7 -window .t.f2 -align center
  661.     .t window create 2.1 -window .t.f3 -align bottom
  662.     .t window create 2.10 -window .t.f4 -align baseline
  663.     update
  664.     list [winfo geometry .t.f1] [winfo geometry .t.f2] \
  665.         [winfo geometry .t.f3] [winfo geometry .t.f4]
  666. } {10x4+24+11 10x4+55+15 10x4+10+43 10x4+76+40}
  667. .t tag delete spacing
  668.  
  669. # Although the following test produces a useful result, its main
  670. # effect is to produce a core dump if Tk doesn't handle display
  671. # relayout that occurs during redisplay.
  672.  
  673. test textDisp-5.2 {DisplayDLine, line resizes during display} {
  674.     .t delete 1.0 end
  675.     frame .t.f -width 20 -height 20 -bd 2 -relief raised
  676.     bind .t.f <Configure> {.t.f configure -width 30 -height 30}
  677.     .t window create insert -window .t.f
  678.     update
  679.     list [winfo width .t.f] [winfo height .t.f]
  680. } {30 30}
  681.  
  682. .t configure -wrap char
  683. test textDisp-6.1 {scrolling in DisplayText, scroll up} {
  684.     .t delete 1.0 end
  685.     .t insert 1.0 "Line 1"
  686.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  687.     .t insert end "\nLine $i"
  688.     }
  689.     update
  690.     .t delete 2.0 3.0
  691.     update
  692.     list $tk_textRelayout $tk_textRedraw
  693. } {{2.0 10.0} {2.0 10.0}}
  694. test textDisp-6.2 {scrolling in DisplayText, scroll down} {
  695.     .t delete 1.0 end
  696.     .t insert 1.0 "Line 1"
  697.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  698.     .t insert end "\nLine $i"
  699.     }
  700.     update
  701.     .t insert 2.0 "New Line 2\n"
  702.     update
  703.     list $tk_textRelayout $tk_textRedraw
  704. } {{2.0 3.0} {2.0 3.0}}
  705. test textDisp-6.3 {scrolling in DisplayText, multiple scrolls} {
  706.     .t configure -wrap char
  707.     .t delete 1.0 end
  708.     .t insert 1.0 "Line 1"
  709.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  710.     .t insert end "\nLine $i"
  711.     }
  712.     update
  713.     .t insert 2.end "is so long that it wraps"
  714.     .t insert 4.end "is so long that it wraps"
  715.     update
  716.     list $tk_textRelayout $tk_textRedraw
  717. } {{2.0 2.20 4.0 4.20} {2.0 2.20 4.0 4.20}}
  718. test textDisp-6.4 {scrolling in DisplayText, scrolls interfere} {
  719.     .t configure -wrap char
  720.     .t delete 1.0 end
  721.     .t insert 1.0 "Line 1"
  722.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  723.     .t insert end "\nLine $i"
  724.     }
  725.     update
  726.     .t insert 2.end "is so long that it wraps around, not once but three times"
  727.     .t insert 4.end "is so long that it wraps"
  728.     update
  729.     list $tk_textRelayout $tk_textRedraw
  730. } {{2.0 2.20 2.40 2.60 4.0 4.20} {2.0 2.20 2.40 2.60 4.0 4.20 6.0}}
  731. test textDisp-6.5 {scrolling in DisplayText, scroll source obscured} {
  732.     .t configure -wrap char
  733.     frame .f2 -bg red
  734.     place .f2 -in .t -relx 0.5 -rely 0.5 -relwidth 0.5 -relheight 0.5
  735.     .t delete 1.0 end
  736.     .t insert 1.0 "Line 1 is so long that it wraps around, a couple of times"
  737.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  738.     .t insert end "\nLine $i"
  739.     }
  740.     update
  741.     .t delete 1.6 1.end
  742.     update
  743.     destroy .f2
  744.     list $tk_textRelayout $tk_textRedraw
  745. } {{1.0 9.0 10.0} {1.0 4.0 5.0 9.0 10.0}}
  746. test textDisp-6.6 {scrolling in DisplayText, Expose events after scroll} {
  747.     .t configure -wrap char
  748.     frame .f2 -bg #ff0000
  749.     place .f2 -in .t -relx 0.2 -rely 0.5 -relwidth 0.5 -relheight 0.5
  750.     .t configure -bd 2 -relief raised
  751.     .t delete 1.0 end
  752.     .t insert 1.0 "Line 1 is so long that it wraps around, a couple of times"
  753.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  754.     .t insert end "\nLine $i"
  755.     }
  756.     update
  757.     .t delete 1.6 1.end
  758.     destroy .f2
  759.     update
  760.     list $tk_textRelayout $tk_textRedraw
  761. } {{1.0 9.0 10.0} {1.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0}}
  762. .t configure -bd 0
  763. test textDisp-6.7 {DisplayText, vertical scrollbar updates} {
  764.     .t configure -wrap char
  765.     .t delete 1.0 end
  766.     update
  767.     set scrollInfo
  768. } {0 1}
  769. test textDisp-6.8 {DisplayText, vertical scrollbar updates} {
  770.     .t configure -wrap char
  771.     .t delete 1.0 end
  772.     .t insert 1.0 "Line 1"
  773.     update
  774.     set scrollInfo "unchanged"
  775.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13} {
  776.     .t insert end "\nLine $i"
  777.     }
  778.     update
  779.     set scrollInfo
  780. } {0 0.769231}
  781. .t configure -yscrollcommand {} -xscrollcommand scroll
  782. test textDisp-6.9 {DisplayText, horizontal scrollbar updates} {
  783.     .t configure -wrap none
  784.     .t delete 1.0 end
  785.     update
  786.     set scrollInfo unchanged
  787.     .t insert end xxxxxxxxx\n
  788.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n
  789.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxx
  790.     update
  791.     set scrollInfo
  792. } {0 0.363636}
  793.  
  794. .t configure -bd 2 -relief raised -wrap char
  795. .t delete 1.0 end
  796. .t insert 1.0 "Line 1 is so long that it wraps around, a couple of times"
  797. foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  798.     .t insert end "\nLine $i"
  799. }
  800. test textDisp-7.1 {TkTextRedrawRegion} {
  801.     frame .f2 -bg #ff0000
  802.     place .f2 -in .t -relx 0.2 -relwidth 0.6 -rely 0.22 -relheight 0.55
  803.     update
  804.     destroy .f2
  805.     update
  806.     list $tk_textRelayout $tk_textRedraw
  807. } {{} {1.40 2.0 3.0 4.0 5.0 6.0}}
  808. test textDisp-7.2 {TkTextRedrawRegion} {
  809.     frame .f2 -bg #ff0000
  810.     place .f2 -in .t -relx 0 -relwidth 0.5 -rely 0 -relheight 0.5
  811.     update
  812.     destroy .f2
  813.     update
  814.     list $tk_textRelayout $tk_textRedraw
  815. } {{} {1.0 1.20 1.40 2.0 3.0}}
  816. test textDisp-7.3 {TkTextRedrawRegion} {
  817.     frame .f2 -bg #ff0000
  818.     place .f2 -in .t -relx 0.5 -relwidth 0.5 -rely 0.5 -relheight 0.5
  819.     update
  820.     destroy .f2
  821.     update
  822.     list $tk_textRelayout $tk_textRedraw
  823. } {{} {4.0 5.0 6.0 7.0 8.0}}
  824. test textDisp-7.4 {TkTextRedrawRegion} {
  825.     frame .f2 -bg #ff0000
  826.     place .f2 -in .t -relx 0.4 -relwidth 0.2 -rely 0 -relheight 0.2 \
  827.         -bordermode ignore
  828.     update
  829.     destroy .f2
  830.     update
  831.     list $tk_textRelayout $tk_textRedraw
  832. } {{} {borders 1.0 1.20}}
  833. test textDisp-7.5 {TkTextRedrawRegion} {
  834.     frame .f2 -bg #ff0000
  835.     place .f2 -in .t -relx 0.4 -relwidth 0.2 -rely 1.0 -relheight 0.2 \
  836.         -anchor s -bordermode ignore
  837.     update
  838.     destroy .f2
  839.     update
  840.     list $tk_textRelayout $tk_textRedraw
  841. } {{} {borders 7.0 8.0}}
  842. test textDisp-7.6 {TkTextRedrawRegion} {
  843.     frame .f2 -bg #ff0000
  844.     place .f2 -in .t -relx 0 -relwidth 0.2 -rely 0.55 -relheight 0.2 \
  845.         -anchor w -bordermode ignore
  846.     update
  847.     destroy .f2
  848.     update
  849.     list $tk_textRelayout $tk_textRedraw
  850. } {{} {borders 3.0 4.0 5.0}}
  851. test textDisp-7.7 {TkTextRedrawRegion} {
  852.     frame .f2 -bg #ff0000
  853.     place .f2 -in .t -relx 1.0 -relwidth 0.2 -rely 0.55 -relheight 0.2 \
  854.         -anchor e -bordermode ignore
  855.     update
  856.     destroy .f2
  857.     update
  858.     list $tk_textRelayout $tk_textRedraw
  859. } {{} {borders 3.0 4.0 5.0}}
  860. test textDisp-7.8 {TkTextRedrawRegion} {
  861.     .t delete 1.0 end
  862.     .t insert 1.0 "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\n"
  863.     frame .f2 -bg #ff0000
  864.     place .f2 -in .t -relx 0.0 -relwidth 0.4 -rely 0.35 -relheight 0.4 \
  865.         -anchor nw -bordermode ignore
  866.     update
  867.     destroy .f2
  868.     update
  869.     list $tk_textRelayout $tk_textRedraw
  870. } {{} {borders 4.0 5.0 6.0 7.0 eof}}
  871. .t configure -bd 0
  872.  
  873. test textDisp-8.1 {TkTextChanged: redisplay whole lines} {
  874.     .t configure -wrap word
  875.     .t delete 1.0 end
  876.     .t insert 1.0 "Line 1\nLine 2 is so long that it wraps around, two times"
  877.     foreach i {3 4 5 6 7 8 9 10 11 12 13 14 15} {
  878.     .t insert end "\nLine $i"
  879.     }
  880.     update
  881.     .t delete 2.36 2.38
  882.     update
  883.     list $tk_textRelayout $tk_textRedraw [.t bbox 2.32]
  884. } {{2.0 2.18 2.38} {2.0 2.18 2.38} {101 29 7 13}}
  885. .t configure -wrap char
  886. test textDisp-8.2 {TkTextChanged, redisplay whole lines} {
  887.     .t delete 1.0 end
  888.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  889.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  890.     .t insert end "\nLine $i"
  891.     }
  892.     update
  893.     .t insert 1.2 xx
  894.     update
  895.     list $tk_textRelayout $tk_textRedraw
  896. } {{1.0 1.20 1.40} {1.0 1.20 1.40}}
  897. test textDisp-8.3 {TkTextChanged} {
  898.     .t delete 1.0 end
  899.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  900.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  901.     .t insert end "\nLine $i"
  902.     }
  903.     update
  904.     .t insert 2.0 xx
  905.     update
  906.     list $tk_textRelayout $tk_textRedraw
  907. } {2.0 2.0}
  908. test textDisp-8.4 {TkTextChanged} {
  909.     .t delete 1.0 end
  910.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  911.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  912.     .t insert end "\nLine $i"
  913.     }
  914.     update
  915.     .t delete 1.5
  916.     update
  917.     list $tk_textRelayout $tk_textRedraw
  918. } {{1.0 1.20 1.40} {1.0 1.20 1.40}}
  919. test textDisp-8.5 {TkTextChanged} {
  920.     .t delete 1.0 end
  921.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  922.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  923.     .t insert end "\nLine $i"
  924.     }
  925.     update
  926.     .t delete 1.40 1.44
  927.     update
  928.     list $tk_textRelayout $tk_textRedraw
  929. } {{1.0 1.20 1.40} {1.0 1.20 1.40}}
  930. test textDisp-8.6 {TkTextChanged} {
  931.     .t delete 1.0 end
  932.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  933.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  934.     .t insert end "\nLine $i"
  935.     }
  936.     update
  937.     .t delete 1.41 1.44
  938.     update
  939.     list $tk_textRelayout $tk_textRedraw
  940. } {{1.0 1.20 1.40} {1.0 1.20 1.40}}
  941. test textDisp-8.7 {TkTextChanged} {
  942.     .t delete 1.0 end
  943.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  944.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  945.     .t insert end "\nLine $i"
  946.     }
  947.     update
  948.     .t delete 1.2 1.end
  949.     update
  950.     list $tk_textRelayout $tk_textRedraw
  951. } {{1.0 9.0 10.0} {1.0 9.0 10.0}}
  952. test textDisp-8.8 {TkTextChanged} {
  953.     .t delete 1.0 end
  954.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  955.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  956.     .t insert end "\nLine $i"
  957.     }
  958.     update
  959.     .t delete 2.2
  960.     update
  961.     list $tk_textRelayout $tk_textRedraw
  962. } {2.0 2.0}
  963. test textDisp-8.9 {TkTextChanged} {
  964.     .t delete 1.0 end
  965.     .t insert 1.0 "Line 1 is so long that it wraps around, two times"
  966.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  967.     .t insert end "\nLine $i"
  968.     }
  969.     update
  970.     .t delete 2.0 3.0
  971.     update
  972.     list $tk_textRelayout $tk_textRedraw
  973. } {{2.0 8.0} {2.0 8.0}}
  974. test textDisp-8.10 {TkTextChanged} {
  975.     .t configure -wrap char
  976.     .t delete 1.0 end
  977.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  978.     .t tag add big 2.19
  979.     update
  980.     .t delete 2.19
  981.     update
  982.     set tk_textRedraw
  983. } {2.0 2.20 eof}
  984.  
  985. test textDisp-9.1 {TkTextRedrawTag} {
  986.     .t configure -wrap char
  987.     .t delete 1.0 end
  988.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap around\nLine 3\nLine 4"
  989.     update
  990.     .t tag add big 2.2 2.4
  991.     update
  992.     list $tk_textRelayout $tk_textRedraw
  993. } {{2.0 2.18} {2.0 2.18}}
  994. test textDisp-9.2 {TkTextRedrawTag} {
  995.     .t configure -wrap char
  996.     .t delete 1.0 end
  997.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap around\nLine 3\nLine 4"
  998.     update
  999.     .t tag add big 1.2 2.4
  1000.     update
  1001.     list $tk_textRelayout $tk_textRedraw
  1002. } {{1.0 2.0 2.17} {1.0 2.0 2.17}}
  1003. test textDisp-9.3 {TkTextRedrawTag} {
  1004.     .t configure -wrap char
  1005.     .t delete 1.0 end
  1006.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap around\nLine 3\nLine 4"
  1007.     update
  1008.     .t tag add big 2.2 2.4
  1009.     .t tag remove big 1.0 end
  1010.     update
  1011.     list $tk_textRelayout $tk_textRedraw
  1012. } {2.0 2.0}
  1013. test textDisp-9.4 {TkTextRedrawTag} {
  1014.     .t configure -wrap char
  1015.     .t delete 1.0 end
  1016.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap around\nLine 3\nLine 4"
  1017.     update
  1018.     .t tag add big 2.2 2.20
  1019.     .t tag remove big 1.0 end
  1020.     update
  1021.     list $tk_textRelayout $tk_textRedraw
  1022. } {2.0 2.0}
  1023. test textDisp-9.5 {TkTextRedrawTag} {
  1024.     .t configure -wrap char
  1025.     .t delete 1.0 end
  1026.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap around\nLine 3\nLine 4"
  1027.     update
  1028.     .t tag add big 2.2 2.end
  1029.     .t tag remove big 1.0 end
  1030.     update
  1031.     list $tk_textRelayout $tk_textRedraw
  1032. } {{2.0 2.20} {2.0 2.20}}
  1033. test textDisp-9.6 {TkTextRedrawTag} {
  1034.     .t configure -wrap char
  1035.     .t delete 1.0 end
  1036.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  1037.     update
  1038.     .t tag add big 2.2 3.5
  1039.     .t tag remove big 1.0 end
  1040.     update
  1041.     list $tk_textRelayout $tk_textRedraw
  1042. } {{2.0 2.20 3.0} {2.0 2.20 3.0}}
  1043. test textDisp-9.7 {TkTextRedrawTag} {
  1044.     .t configure -wrap char
  1045.     .t delete 1.0 end
  1046.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  1047.     .t tag add big 2.19
  1048.     update
  1049.     .t tag remove big 2.19
  1050.     update
  1051.     set tk_textRedraw
  1052. } {2.0 2.20 eof}
  1053. test textDisp-9.8 {TkTextRedrawTag} {
  1054.     .t configure -wrap char
  1055.     .t delete 1.0 end
  1056.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  1057.     .t tag add big 1.0 2.0
  1058.     update
  1059.     .t tag add big 2.0 2.5
  1060.     update
  1061.     set tk_textRedraw
  1062. } {2.0 2.17}
  1063. test textDisp-9.9 {TkTextRedrawTag} {
  1064.     .t configure -wrap char
  1065.     .t delete 1.0 end
  1066.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  1067.     .t tag add big 1.0 2.0
  1068.     update
  1069.     .t tag add big 1.5 2.5
  1070.     update
  1071.     set tk_textRedraw
  1072. } {2.0 2.17}
  1073. test textDisp-9.10 {TkTextRedrawTag} {
  1074.     .t configure -wrap char
  1075.     .t delete 1.0 end
  1076.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  1077.     .t tag add big 1.0 2.0
  1078.     update
  1079.     set tk_textRedraw {none}
  1080.     .t tag add big 1.3 1.5
  1081.     update
  1082.     set tk_textRedraw
  1083. } {none}
  1084. test textDisp-9.11 {TkTextRedrawTag} {
  1085.     .t configure -wrap char
  1086.     .t delete 1.0 end
  1087.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  1088.     .t tag add big 1.0 2.0
  1089.     update
  1090.     .t tag add big 1.0 2.0
  1091.     update
  1092.     set tk_textRedraw
  1093. } {}
  1094.  
  1095. test textDisp-10.1 {TkTextRelayoutWindow} {
  1096.     .t configure -wrap char
  1097.     .t delete 1.0 end
  1098.     .t insert 1.0 "Line 1\nLine 2 is long enough to wrap\nLine 3 is also long enough to wrap\nLine 4"
  1099.     update
  1100.     .t configure -bg black
  1101.     update
  1102.     list $tk_textRelayout $tk_textRedraw
  1103. } {{1.0 2.0 2.20 3.0 3.20 4.0} {borders 1.0 2.0 2.20 3.0 3.20 4.0 eof}}
  1104. .t configure -bg [lindex [.t configure -bg] 3]
  1105. test textDisp-10.2 {TkTextRelayoutWindow} {
  1106.     toplevel .top -width 300 -height 200
  1107.     wm geometry .top +0+0
  1108.     text .top.t -font $fixedFont -width 20 -height 10 -relief raised -bd 2
  1109.     place .top.t -x 0 -y 0 -width 20 -height 20
  1110.     .top.t insert end "First line"
  1111.     .top.t see insert
  1112.     tkwait visibility .top.t
  1113.     place .top.t -width 150 -height 100
  1114.     update
  1115.     .top.t index @0,0
  1116. } {1.0}
  1117. catch {destroy .top}
  1118.  
  1119. .t delete 1.0 end
  1120. .t insert end "Line 1"
  1121. for {set i 2} {$i <= 200} {incr i} {
  1122.     .t insert end "\nLine $i"
  1123. }
  1124. update
  1125. test textDisp-11.1 {TkTextSetYView} {
  1126.     .t yview 30.0
  1127.     update
  1128.     .t index @0,0
  1129. } {30.0}
  1130. test textDisp-11.2 {TkTextSetYView} {
  1131.     .t yview 30.0
  1132.     update
  1133.     .t yview 32.0
  1134.     update
  1135.     list [.t index @0,0] $tk_textRedraw
  1136. } {32.0 {40.0 41.0}}
  1137. test textDisp-11.3 {TkTextSetYView} {
  1138.     .t yview 30.0
  1139.     update
  1140.     .t yview 28.0
  1141.     update
  1142.     list [.t index @0,0] $tk_textRedraw
  1143. } {28.0 {28.0 29.0}}
  1144. test textDisp-11.4 {TkTextSetYView} {
  1145.     .t yview 30.0
  1146.     update
  1147.     .t yview 31.4
  1148.     update
  1149.     list [.t index @0,0] $tk_textRedraw
  1150. } {31.0 40.0}
  1151. test textDisp-11.5 {TkTextSetYView} {
  1152.     .t yview 30.0
  1153.     update
  1154.     set tk_textRedraw {}
  1155.     .t yview -pickplace 31.0
  1156.     update
  1157.     list [.t index @0,0] $tk_textRedraw
  1158. } {30.0 {}}
  1159. test textDisp-11.6 {TkTextSetYView} {
  1160.     .t yview 30.0
  1161.     update
  1162.     set tk_textRedraw {}
  1163.     .t yview -pickplace 28.0
  1164.     update
  1165.     list [.t index @0,0] $tk_textRedraw
  1166. } {28.0 {28.0 29.0}}
  1167. test textDisp-11.7 {TkTextSetYView} {
  1168.     .t yview 30.0
  1169.     update
  1170.     set tk_textRedraw {}
  1171.     .t yview -pickplace 26.0
  1172.     update
  1173.     list [.t index @0,0] $tk_textRedraw
  1174. } {22.0 {22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0}}
  1175. test textDisp-11.8 {TkTextSetYView} {
  1176.     .t yview 30.0
  1177.     update
  1178.     set tk_textRedraw {}
  1179.     .t yview -pickplace 41.0
  1180.     update
  1181.     list [.t index @0,0] $tk_textRedraw
  1182. } {32.0 {40.0 41.0}}
  1183. test textDisp-11.9 {TkTextSetYView} {
  1184.     .t yview 30.0
  1185.     update
  1186.     set tk_textRedraw {}
  1187.     .t yview -pickplace 43.0
  1188.     update
  1189.     list [.t index @0,0] $tk_textRedraw
  1190. } {39.0 {40.0 41.0 42.0 43.0 44.0 45.0 46.0 47.0 48.0}}
  1191. test textDisp-11.10 {TkTextSetYView} {
  1192.     .t yview 30.0
  1193.     update
  1194.     set tk_textRedraw {}
  1195.     .t yview 10000.0
  1196.     update
  1197.     list [.t index @0,0] $tk_textRedraw
  1198. } {191.0 {191.0 192.0 193.0 194.0 195.0 196.0 197.0 198.0 199.0 200.0}}
  1199. test textDisp-11.11 {TkTextSetYView} {
  1200.     .t yview 195.0
  1201.     update
  1202.     set tk_textRedraw {}
  1203.     .t yview 197.0
  1204.     update
  1205.     list [.t index @0,0] $tk_textRedraw
  1206. } {191.0 {191.0 192.0 193.0 194.0 195.0 196.0}}
  1207. test textDisp-11.12 {TkTextSetYView, wrapped line is off-screen} {
  1208.     .t insert 10.0 "Long line with enough text to wrap\n"
  1209.     .t yview 1.0
  1210.     update
  1211.     set tk_textRedraw {}
  1212.     .t see 10.30
  1213.     update
  1214.     list [.t index @0,0] $tk_textRedraw
  1215. } {2.0 10.20}
  1216. .t delete 10.0 11.0
  1217. test textDisp-11.13 {TkTestSetYView, partially-visible last line} {
  1218.     catch {destroy .top}
  1219.     toplevel .top
  1220.     wm geometry .top +0+0
  1221.     text .top.t -width 20 -height 5
  1222.     pack .top.t
  1223.     .top.t insert end "Line 1"
  1224.     for {set i 2} {$i <= 100} {incr i} {
  1225.     .top.t insert end "\nLine $i"
  1226.     }
  1227.     update
  1228.     scan [wm geometry .top] "%dx%d" w2 h2
  1229.     wm geometry .top ${w2}x[expr $h2-2]
  1230.     update
  1231.     .top.t yview 1.0
  1232.     update
  1233.     set tk_textRedraw {}
  1234.     .top.t see 5.0
  1235.     update
  1236.     list [.top.t index @0,0] $tk_textRedraw
  1237. } {2.0 {5.0 6.0}}
  1238. catch {destroy .top}
  1239.  
  1240. .t configure -wrap word
  1241. .t delete 50.0 51.0
  1242. .t insert 50.0 "This is a long line, one that will wrap around twice.\n"
  1243. test textDisp-12.1 {MeasureUp} {
  1244.     .t yview 100.0
  1245.     update
  1246.     .t yview -pickplace 52.0
  1247.     update
  1248.     .t index @0,0
  1249. } {50.0}
  1250. test textDisp-12.2 {MeasureUp} {
  1251.     .t yview 100.0
  1252.     update
  1253.     .t yview -pickplace 53.0
  1254.     update
  1255.     .t index @0,0
  1256. } {50.15}
  1257. test textDisp-12.3 {MeasureUp} {
  1258.     .t yview 100.0
  1259.     update
  1260.     .t yview -pickplace 50.10
  1261.     update
  1262.     .t index @0,0
  1263. } {46.0}
  1264. .t configure -wrap none
  1265. test textDisp-12.4 {MeasureUp} {
  1266.     .t yview 100.0
  1267.     update
  1268.     .t yview -pickplace 53.0
  1269.     update
  1270.     .t index @0,0
  1271. } {49.0}
  1272. test textDisp-12.5 {MeasureUp} {
  1273.     .t yview 100.0
  1274.     update
  1275.     .t yview -pickplace 50.10
  1276.     update
  1277.     .t index @0,0
  1278. } {46.0}
  1279.  
  1280. .t configure -wrap none
  1281. .t delete 1.0 end
  1282. for {set i 1} {$i < 99} {incr i} {
  1283.     .t insert end "Line $i\n"
  1284. }
  1285. .t insert end "Line 100"
  1286. .t insert 30.end { is quite long, so that it flows way off the end of the window and we can use it to test out the horizontal positioning features of the "see" command.}
  1287. test textDisp-13.1 {TkTextSeeCmd procedure} {
  1288.     list [catch {.t see} msg] $msg
  1289. } {1 {wrong # args: should be ".t see index"}}
  1290. test textDisp-13.2 {TkTextSeeCmd procedure} {
  1291.     list [catch {.t see a b} msg] $msg
  1292. } {1 {wrong # args: should be ".t see index"}}
  1293. test textDisp-13.3 {TkTextSeeCmd procedure} {
  1294.     list [catch {.t see badIndex} msg] $msg
  1295. } {1 {bad text index "badIndex"}}
  1296. test textDisp-13.4 {TkTextSeeCmd procedure} {
  1297.     .t xview moveto 0
  1298.     .t yview moveto 0
  1299.     update
  1300.     .t see 4.2
  1301.     .t index @0,0
  1302. } {1.0}
  1303. test textDisp-13.5 {TkTextSeeCmd procedure} {
  1304.     .t configure -wrap char
  1305.     .t xview moveto 0
  1306.     .t yview moveto 0
  1307.     update
  1308.     .t see 12.1
  1309.     .t index @0,0
  1310. } {3.0}
  1311. test textDisp-13.6 {TkTextSeeCmd procedure} {
  1312.     .t configure -wrap char
  1313.     .t xview moveto 0
  1314.     .t yview moveto 0
  1315.     update
  1316.     .t see 30.50
  1317.     set x [.t index @0,0]
  1318.     .t configure -wrap none
  1319.     set x
  1320. } {28.0}
  1321. test textDisp-13.7 {TkTextSeeCmd procedure} {
  1322.     .t xview moveto 0
  1323.     .t yview moveto 0
  1324.     .t tag add sel 30.20
  1325.     .t tag add sel 30.40
  1326.     update
  1327.     .t see 30.50
  1328.     set x [list [.t bbox 30.50]]
  1329.     .t see 30.39
  1330.     lappend x [.t bbox 30.39]
  1331.     .t see 30.38
  1332.     lappend x [.t bbox 30.38]
  1333.     .t see 30.20
  1334.     lappend x [.t bbox 30.20]
  1335. } {{73 55 7 13} {3 55 7 13} {3 55 7 13} {73 55 7 13}}
  1336. test textDisp-13.8 {TkTextSeeCmd procedure} {
  1337.     .t xview moveto 0
  1338.     .t yview moveto 0
  1339.     .t tag add sel 30.20
  1340.     .t tag add sel 30.50
  1341.     update
  1342.     .t see 30.50
  1343.     set x [list [.t bbox 30.50]]
  1344.     .t see 30.60
  1345.     lappend x [.t bbox 30.60]
  1346.     .t see 30.65
  1347.     lappend x [.t bbox 30.65]
  1348.     .t see 30.90
  1349.     lappend x [.t bbox 30.90]
  1350. } {{73 55 7 13} {136 55 7 13} {136 55 7 13} {73 55 7 13}}
  1351. test textDisp-13.9 {TkTextSeeCmd procedure} {
  1352.     wm geom . [expr $width-2]x$height
  1353.     .t xview moveto 0
  1354.     .t yview moveto 0
  1355.     .t tag add sel 30.20
  1356.     .t tag add sel 30.50
  1357.     update
  1358.     .t see 30.50
  1359.     set x [list [.t bbox 30.50]]
  1360.     .t see 30.60
  1361.     lappend x [.t bbox 30.60]
  1362.     .t see 30.65
  1363.     lappend x [.t bbox 30.65]
  1364.     .t see 30.90
  1365.     lappend x [.t bbox 30.90]
  1366. } {{80 55 7 13} {136 55 7 13} {136 55 7 13} {80 55 7 13}}
  1367. wm geom . {}
  1368.  
  1369. .t configure -wrap none
  1370. test textDisp-14.1 {TkTextXviewCmd procedure} {
  1371.     .t delete 1.0 end
  1372.     update
  1373.     .t insert end xxxxxxxxx\n
  1374.     .t insert end "xxxxx xxxxxxxxxxx xxxx xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx\n"
  1375.     .t insert end "xxxx xxxxxxxxx xxxxxxxxxxxxx"
  1376.     .t xview moveto .5
  1377.     .t xview
  1378. } {0.5 0.857143}
  1379. .t configure -wrap char
  1380. test textDisp-14.2 {TkTextXviewCmd procedure} {
  1381.     .t delete 1.0 end
  1382.     update
  1383.     .t insert end xxxxxxxxx\n
  1384.     .t insert end "xxxxx\n"
  1385.     .t insert end "xxxx"
  1386.     .t xview
  1387. } {0 1}
  1388. .t configure -wrap none
  1389. test textDisp-14.3 {TkTextXviewCmd procedure} {
  1390.     .t delete 1.0 end
  1391.     update
  1392.     .t insert end xxxxxxxxx\n
  1393.     .t insert end "xxxxx\n"
  1394.     .t insert end "xxxx"
  1395.     .t xview
  1396. } {0 1}
  1397. test textDisp-14.4 {TkTextXviewCmd procedure} {
  1398.     list [catch {.t xview moveto} msg] $msg
  1399. } {1 {wrong # args: should be ".t xview moveto fraction"}}
  1400. test textDisp-14.5 {TkTextXviewCmd procedure} {
  1401.     list [catch {.t xview moveto a b} msg] $msg
  1402. } {1 {wrong # args: should be ".t xview moveto fraction"}}
  1403. test textDisp-14.6 {TkTextXviewCmd procedure} {
  1404.     list [catch {.t xview moveto a} msg] $msg
  1405. } {1 {expected floating-point number but got "a"}}
  1406. test textDisp-14.7 {TkTextXviewCmd procedure} {
  1407.     .t delete 1.0 end
  1408.     .t insert end xxxxxxxxx\n
  1409.     .t insert end "xxxxx xxxxxxxxxxx xxxx xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx\n"
  1410.     .t insert end "xxxx xxxxxxxxx xxxxxxxxxxxxx"
  1411.     .t xview moveto .3
  1412.     .t xview
  1413. } {0.285714 0.642857}
  1414. test textDisp-14.8 {TkTextXviewCmd procedure} {
  1415.     .t delete 1.0 end
  1416.     .t insert end xxxxxxxxx\n
  1417.     .t insert end "xxxxx xxxxxxxxxxx xxxx xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx\n"
  1418.     .t insert end "xxxx xxxxxxxxx xxxxxxxxxxxxx"
  1419.     .t xview moveto -.4
  1420.     .t xview
  1421. } {0 0.357143}
  1422. test textDisp-14.9 {TkTextXviewCmd procedure} {
  1423.     .t delete 1.0 end
  1424.     .t insert end xxxxxxxxx\n
  1425.     .t insert end "xxxxx xxxxxxxxxxx xxxx xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx\n"
  1426.     .t insert end "xxxx xxxxxxxxx xxxxxxxxxxxxx"
  1427.     .t xview m 1.4
  1428.     .t xview
  1429. } {0.642857 1}
  1430. test textDisp-14.10 {TkTextXviewCmd procedure} {
  1431.     list [catch {.t xview scroll a} msg] $msg
  1432. } {1 {wrong # args: should be ".t xview scroll number units|pages"}}
  1433. test textDisp-14.11 {TkTextXviewCmd procedure} {
  1434.     list [catch {.t xview scroll a b c} msg] $msg
  1435. } {1 {wrong # args: should be ".t xview scroll number units|pages"}}
  1436. test textDisp-14.12 {TkTextXviewCmd procedure} {
  1437.     list [catch {.t xview scroll gorp units} msg] $msg
  1438. } {1 {expected integer but got "gorp"}}
  1439. test textDisp-14.13 {TkTextXviewCmd procedure} {
  1440.     .t delete 1.0 end
  1441.     .t insert end xxxxxxxxx\n
  1442.     .t insert end "a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9\n"
  1443.     .t insert end "xxxx xxxxxxxxx xxxxxxxxxxxxx"
  1444.     .t xview moveto 0
  1445.     .t xview scroll 2 p
  1446.     set x [.t index @0,22]
  1447.     .t xview scroll -1 p
  1448.     lappend x [.t index @0,22]
  1449.     .t xview scroll -2 pages
  1450.     lappend x [.t index @0,22]
  1451. } {2.36 2.18 2.0}
  1452. test textDisp-14.14 {TkTextXviewCmd procedure} {
  1453.     .t delete 1.0 end
  1454.     .t insert end xxxxxxxxx\n
  1455.     .t insert end "a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9\n"
  1456.     .t insert end "xxxx xxxxxxxxx xxxxxxxxxxxxx"
  1457.     .t xview moveto 0
  1458.     .t xview scroll 21 u  
  1459.     set x [.t index @0,22]
  1460.     .t xview scroll -1 u
  1461.     lappend x [.t index @0,22]
  1462.     .t xview scroll 100 units
  1463.     lappend x [.t index @0,22]
  1464.     .t xview scroll -15 units
  1465.     lappend x [.t index @0,22]
  1466. } {2.21 2.20 2.99 2.84}
  1467. test textDisp-14.15 {TkTextXviewCmd procedure} {
  1468.     list [catch {.t xview scroll 14 globs} msg] $msg
  1469. } {1 {bad argument "globs": must be units or pages}}
  1470. test textDisp-14.16 {TkTextXviewCmd procedure} {
  1471.     list [catch {.t xview flounder} msg] $msg
  1472. } {1 {unknown option "flounder": must be moveto or scroll}}
  1473.  
  1474. .t configure -wrap char
  1475. .t delete 1.0 end
  1476. for {set i 1} {$i < 99} {incr i} {
  1477.     .t insert end "Line $i\n"
  1478. }
  1479. .t insert end "Line 100"
  1480. .t delete 50.0 51.0
  1481. .t insert 50.0 "This is a long line, one that will wrap around twice.\n"
  1482. test textDisp-15.1 {ScrollByLines procedure, scrolling backwards} {
  1483.     .t yview 45.0
  1484.     update
  1485.     .t yview scroll -3 units
  1486.     .t index @0,0
  1487. } {42.0}
  1488. test textDisp-15.2 {ScrollByLines procedure, scrolling backwards} {
  1489.     .t yview 51.0
  1490.     update
  1491.     .t yview scroll -2 units
  1492.     .t index @0,0
  1493. } {50.20}
  1494. test textDisp-15.3 {ScrollByLines procedure, scrolling backwards} {
  1495.     .t yview 51.0
  1496.     update
  1497.     .t yview scroll -4 units
  1498.     .t index @0,0
  1499. } {49.0}
  1500. test textDisp-15.4 {ScrollByLines procedure, scrolling backwards} {
  1501.     .t yview 50.20
  1502.     update
  1503.     .t yview scroll -2 units
  1504.     .t index @0,0
  1505. } {49.0}
  1506. test textDisp-15.5 {ScrollByLines procedure, scrolling backwards} {
  1507.     .t yview 50.40
  1508.     update
  1509.     .t yview scroll -2 units
  1510.     .t index @0,0
  1511. } {50.0}
  1512. test textDisp-15.6 {ScrollByLines procedure, scrolling backwards} {
  1513.     .t yview 3.2
  1514.     update
  1515.     .t yview scroll -5 units
  1516.     .t index @0,0
  1517. } {1.0}
  1518. test textDisp-15.7 {ScrollByLines procedure, scrolling forwards} {
  1519.     .t yview 48.0
  1520.     update
  1521.     .t yview scroll 4 units
  1522.     .t index @0,0
  1523. } {50.40}
  1524.  
  1525. .t configure -wrap char
  1526. .t delete 1.0 end
  1527. .t insert insert "Line 1"
  1528. for {set i 2} {$i <= 200} {incr i} {
  1529.     .t insert end "\nLine $i"
  1530. }
  1531. .t tag add big 100.0 105.0
  1532. .t insert 151.end { has a lot of extra text, so that it wraps around on the screen several times over.}
  1533. .t insert 153.end { also has enoug extra text to wrap.}
  1534. update
  1535. test textDisp-16.1 {TkTextYviewCmd procedure} {
  1536.     .t yview 21.0
  1537.     set x [.t yview]
  1538.     .t yview 1.0
  1539.     set x
  1540. } {0.1 0.15}
  1541. test textDisp-16.2 {TkTextYviewCmd procedure} {
  1542.     list [catch {.t yview 2 3} msg] $msg
  1543. } {1 {unknown option "2": must be moveto or scroll}}
  1544. test textDisp-16.3 {TkTextYviewCmd procedure} {
  1545.     list [catch {.t yview -pickplace} msg] $msg
  1546. } {1 {wrong # args: should be ".t yview -pickplace lineNum|index"}}
  1547. test textDisp-16.4 {TkTextYviewCmd procedure} {
  1548.     list [catch {.t yview -pickplace 2 3} msg] $msg
  1549. } {1 {wrong # args: should be ".t yview -pickplace lineNum|index"}}
  1550. test textDisp-16.5 {TkTextYviewCmd procedure} {
  1551.     list [catch {.t yview -bogus 2} msg] $msg
  1552. } {1 {unknown option "-bogus": must be moveto or scroll}}
  1553. test textDisp-16.6 {TkTextYviewCmd procedure, integer position} {
  1554.     .t yview 100.0
  1555.     update
  1556.     .t yview 98
  1557.     .t index @0,0
  1558. } {99.0}
  1559. test textDisp-16.7 {TkTextYviewCmd procedure} {
  1560.     .t yview 2.0
  1561.     .t yv -pickplace 13.0
  1562.     .t index @0,0
  1563. } {4.0}
  1564. test textDisp-16.8 {TkTextYviewCmd procedure} {
  1565.     list [catch {.t yview bad_mark_name} msg] $msg
  1566. } {1 {bad text index "bad_mark_name"}}
  1567. test textDisp-16.9 {TkTextYviewCmd procedure, "moveto" option} {
  1568.     list [catch {.t yview moveto a b} msg] $msg
  1569. } {1 {wrong # args: should be ".t yview moveto fraction"}}
  1570. test textDisp-16.10 {TkTextYviewCmd procedure, "moveto" option} {
  1571.     list [catch {.t yview moveto gorp} msg] $msg
  1572. } {1 {expected floating-point number but got "gorp"}}
  1573. test textDisp-16.11 {TkTextYviewCmd procedure, "moveto" option} {
  1574.     .t yview moveto 0.5
  1575.     .t index @0,0
  1576. } {101.0}
  1577. test textDisp-16.12 {TkTextYviewCmd procedure, "moveto" option} {
  1578.     .t yview moveto -1
  1579.     .t index @0,0
  1580. } {1.0}
  1581. test textDisp-16.13 {TkTextYviewCmd procedure, "moveto" option} {
  1582.     .t yview moveto 1.1
  1583.     .t index @0,0
  1584. } {191.0}
  1585. test textDisp-16.14 {TkTextYviewCmd procedure, "moveto" option} {
  1586.     .t yview moveto .75
  1587.     .t index @0,0
  1588. } {151.0}
  1589. test textDisp-16.15 {TkTextYviewCmd procedure, "moveto" option} {
  1590.     .t yview moveto .752
  1591.     .t index @0,0
  1592. } {151.20}
  1593. test textDisp-16.16 {TkTextYviewCmd procedure, "moveto" option} {
  1594.     .t yview moveto .754
  1595.     .t index @0,0
  1596. } {151.60}
  1597. test textDisp-16.17 {TkTextYviewCmd procedure, "moveto" option} {
  1598.     .t yview moveto .755
  1599.     .t index @0,0
  1600. } {152.0}
  1601. test textDisp-16.18 {TkTextYviewCmd procedure, "scroll" option} {
  1602.     list [catch {.t yview scroll a} msg] $msg
  1603. } {1 {wrong # args: should be ".t yview scroll number units|pages"}}
  1604. test textDisp-16.19 {TkTextYviewCmd procedure, "scroll" option} {
  1605.     list [catch {.t yview scroll a b c} msg] $msg
  1606. } {1 {wrong # args: should be ".t yview scroll number units|pages"}}
  1607. test textDisp-16.20 {TkTextYviewCmd procedure, "scroll" option} {
  1608.     list [catch {.t yview scroll badInt bogus} msg] $msg
  1609. } {1 {expected integer but got "badInt"}}
  1610. test textDisp-16.21 {TkTextYviewCmd procedure, "scroll" option, back pages} {
  1611.     .t yview 50.0
  1612.     update
  1613.     .t yview scroll -1 pages
  1614.     .t index @0,0
  1615. } {42.0}
  1616. test textDisp-16.22 {TkTextYviewCmd procedure, "scroll" option, back pages} {
  1617.     .t yview 50.0
  1618.     update
  1619.     .t yview scroll -3 p
  1620.     .t index @0,0
  1621. } {26.0}
  1622. test textDisp-16.23 {TkTextYviewCmd procedure, "scroll" option, back pages} {
  1623.     .t yview 5.0
  1624.     update
  1625.     .t yview scroll -3 p
  1626.     .t index @0,0
  1627. } {1.0}
  1628. test textDisp-16.24 {TkTextYviewCmd procedure, "scroll" option, back pages} {
  1629.     .t configure -height 1
  1630.     update
  1631.     .t yview 50.0
  1632.     update
  1633.     .t yview scroll -1 pages
  1634.     set x [.t index @0,0]
  1635.     .t configure -height 10
  1636.     update
  1637.     set x
  1638. } {49.0}
  1639. test textDisp-16.25 {TkTextYviewCmd procedure, "scroll" option, forward pages} {
  1640.     .t yview 50.0
  1641.     update
  1642.     .t yview scroll 1 pages
  1643.     .t index @0,0
  1644. } {58.0}
  1645. test textDisp-16.26 {TkTextYviewCmd procedure, "scroll" option, forward pages} {
  1646.     .t yview 50.0
  1647.     update
  1648.     .t yview scroll 2 pages
  1649.     .t index @0,0
  1650. } {66.0}
  1651. test textDisp-16.27 {TkTextYviewCmd procedure, "scroll" option, forward pages} {
  1652.     .t yview 98.0
  1653.     update
  1654.     .t yview scroll 1 page
  1655.     .t index @0,0
  1656. } {103.0}
  1657. test textDisp-16.28 {TkTextYviewCmd procedure, "scroll" option, forward pages} {
  1658.     .t configure -height 1
  1659.     update
  1660.     .t yview 50.0
  1661.     update
  1662.     .t yview scroll 1 pages
  1663.     set x [.t index @0,0]
  1664.     .t configure -height 10
  1665.     update
  1666.     set x
  1667. } {51.0}
  1668. test textDisp-16.29 {TkTextYviewCmd procedure, "scroll units" option} {
  1669.     .t yview 45.0
  1670.     update
  1671.     .t yview scroll -3 units
  1672.     .t index @0,0
  1673. } {42.0}
  1674. test textDisp-16.30 {TkTextYviewCmd procedure, "scroll units" option} {
  1675.     .t yview 149.0
  1676.     update
  1677.     .t yview scroll 4 units
  1678.     .t index @0,0
  1679. } {151.40}
  1680. test textDisp-16.31 {TkTextYviewCmd procedure} {
  1681.     list [catch {.t yview scroll 12 bogoids} msg] $msg
  1682. } {1 {bad argument "bogoids": must be units or pages}}
  1683. test textDisp-16.32 {TkTextYviewCmd procedure} {
  1684.     list [catch {.t yview bad_arg 1 2} msg] $msg
  1685. } {1 {unknown option "bad_arg": must be moveto or scroll}}
  1686.  
  1687. .t delete 1.0 end
  1688. foreach i {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
  1689.     .t insert end "\nLine $i 11111 $i 22222 $i 33333 $i 44444 $i 55555"
  1690.     .t insert end " $i 66666 $i 77777 $i 88888 $i"
  1691. }
  1692. .t configure -wrap none
  1693. test textDisp-17.1 {TkTextScanCmd procedure} {
  1694.     list [catch {.t scan a b} msg] $msg
  1695. } {1 {wrong # args: should be ".t scan mark|dragto x y"}}
  1696. test textDisp-17.2 {TkTextScanCmd procedure} {
  1697.     list [catch {.t scan a b c d} msg] $msg
  1698. } {1 {wrong # args: should be ".t scan mark|dragto x y"}}
  1699. test textDisp-17.3 {TkTextScanCmd procedure} {
  1700.     list [catch {.t scan stupid b 20} msg] $msg
  1701. } {1 {expected integer but got "b"}}
  1702. test textDisp-17.4 {TkTextScanCmd procedure} {
  1703.     list [catch {.t scan stupid -2 bogus} msg] $msg
  1704. } {1 {expected integer but got "bogus"}}
  1705. test textDisp-17.5 {TkTextScanCmd procedure} {
  1706.     list [catch {.t scan stupid 123 456} msg] $msg
  1707. } {1 {bad scan option "stupid":  must be mark or dragto}}
  1708. test textDisp-17.6 {TkTextScanCmd procedure} {
  1709.     .t yview 1.0
  1710.     .t xview moveto 0
  1711.     .t scan mark 40 60
  1712.     .t scan dragto 35 55
  1713.     .t index @0,0
  1714. } {4.7}
  1715. test textDisp-17.7 {TkTextScanCmd procedure} {
  1716.     .t yview 10.0
  1717.     .t xview moveto 0
  1718.     .t xview scroll 20 units
  1719.     .t scan mark -10 60
  1720.     .t scan dragto -5 65
  1721.     .t index @0,0
  1722.     set x [.t index @0,0]
  1723.     .t scan dragto 0 70
  1724.     list $x [.t index @0,0]
  1725. } {7.13 3.6}
  1726. test textDisp-17.8 {TkTextScanCmd procedure} {
  1727.     .t yview 1.0
  1728.     .t xview moveto 0
  1729.     .t scan mark 0 60
  1730.     .t scan dragto 30 100
  1731.     .t scan dragto 25 95 
  1732.     .t index @0,0
  1733. } {4.7}
  1734. test textDisp-17.9 {TkTextScanCmd procedure} {
  1735.     .t yview end
  1736.     .t xview moveto 0
  1737.     .t xview scroll 100 units
  1738.     .t scan mark 90 60
  1739.     .t scan dragto 10 0
  1740.     .t scan dragto 15 5
  1741.     .t index @0,0
  1742. } {18.44}
  1743. .t configure -wrap word
  1744. test textDisp-17.10 {TkTextScanCmd procedure, word wrapping} {
  1745.     .t yview 10.0
  1746.     .t scan mark -10 60
  1747.     .t scan dragto -5 65
  1748.     set x [.t index @0,0]
  1749.     .t scan dragto 0 70
  1750.     list $x [.t index @0,0]
  1751. } {9.31 8.47}
  1752.  
  1753. .t configure -xscrollcommand scroll -yscrollcommand {}
  1754. test textDisp-18.1 {GetXView procedure} {
  1755.     .t configure -wrap none
  1756.     .t delete 1.0 end
  1757.     .t insert end xxxxxxxxx\n
  1758.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n
  1759.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxx
  1760.     update
  1761.     set scrollInfo
  1762. } {0 0.363636}
  1763. test textDisp-18.2 {GetXView procedure} {
  1764.     .t configure -wrap char
  1765.     .t delete 1.0 end
  1766.     .t insert end xxxxxxxxx\n
  1767.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n
  1768.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxx
  1769.     update
  1770.     set scrollInfo
  1771. } {0 1}
  1772. test textDisp-18.3 {GetXView procedure} {
  1773.     .t configure -wrap none
  1774.     .t delete 1.0 end
  1775.     update
  1776.     set scrollInfo
  1777. } {0 1}
  1778. test textDisp-18.4 {GetXView procedure} {
  1779.     .t configure -wrap none
  1780.     .t delete 1.0 end
  1781.     .t insert end xxxxxxxxx\n
  1782.     .t insert end xxxxxx\n
  1783.     .t insert end xxxxxxxxxxxxxxxxx
  1784.     update
  1785.     set scrollInfo
  1786. } {0 1}
  1787. test textDisp-18.5 {GetXView procedure} {
  1788.     .t configure -wrap none
  1789.     .t delete 1.0 end
  1790.     .t insert end xxxxxxxxx\n
  1791.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n
  1792.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxx
  1793.     .t xview scroll 31 units
  1794.     update
  1795.     set scrollInfo
  1796. } {0.563636 0.927273}
  1797. test textDisp-18.6 {GetXView procedure} {
  1798.     .t configure -wrap none
  1799.     .t delete 1.0 end
  1800.     .t insert end xxxxxxxxx\n
  1801.     .t insert end "xxxxx xxxxxxxxxxx xxxx xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx\n"
  1802.     .t insert end "xxxx xxxxxxxxx xxxxxxxxxxxxx"
  1803.     .t xview moveto 0
  1804.     .t xview scroll 31 units
  1805.     update
  1806.     set x {}
  1807.     lappend x $scrollInfo
  1808.     .t configure -wrap char
  1809.     update
  1810.     lappend x $scrollInfo
  1811.     .t configure -wrap word
  1812.     update
  1813.     lappend x $scrollInfo
  1814.     .t configure -wrap none
  1815.     update
  1816.     lappend x $scrollInfo
  1817. } {{0.553571 0.910714} {0 1} {0 1} {0 0.357143}}
  1818. test textDisp-18.7 {GetXView procedure} {
  1819.     .t configure -wrap none
  1820.     .t delete 1.0 end
  1821.     update
  1822.     set scrollInfo unchanged
  1823.     .t insert end xxxxxx\n
  1824.     .t insert end xxx
  1825.     update
  1826.     set scrollInfo
  1827. } {unchanged}
  1828. test textDisp-18.8 {GetXView procedure} {
  1829.     proc tkerror msg {
  1830.     global x errorInfo
  1831.     set x [list $msg $errorInfo]
  1832.     }
  1833.     proc bogus args {
  1834.     error "bogus scroll proc"
  1835.     }
  1836.     .t configure -wrap none
  1837.     .t delete 1.0 end
  1838.     .t insert end xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n
  1839.     update
  1840.     .t delete 1.0 end
  1841.     .t configure -xscrollcommand scrollError
  1842.     update
  1843.     set x
  1844. } {{scrolling error} {scrolling error
  1845.     while executing
  1846. "error "scrolling error""
  1847.     (procedure "scrollError" line 2)
  1848.     invoked from within
  1849. "scrollError 0 1"
  1850.     (horizontal scrolling command executed by text)}}
  1851. catch {rename tkerror {}}
  1852. catch {rename bogus {}}
  1853. .t configure -xscrollcommand {} -yscrollcommand scroll
  1854.  
  1855. .t configure -xscrollcommand {} -yscrollcommand scroll
  1856. test textDisp-19.1 {GetYView procedure} {
  1857.     .t configure -wrap char
  1858.     .t delete 1.0 end
  1859.     update
  1860.     set scrollInfo
  1861. } {0 1}
  1862. test textDisp-19.2 {GetYView procedure} {
  1863.     .t configure -wrap char
  1864.     .t delete 1.0 end
  1865.     update
  1866.     set scrollInfo "unchanged"
  1867.     .t insert 1.0 "Line1\nLine2"
  1868.     update
  1869.     set scrollInfo
  1870. } {unchanged}
  1871. test textDisp-19.3 {GetYView procedure} {
  1872.     .t configure -wrap char
  1873.     .t delete 1.0 end
  1874.     update
  1875.     set scrollInfo "unchanged"
  1876.     .t insert 1.0 "Line 1\nLine 2 is so long that it wraps around\nLine 3"
  1877.     update
  1878.     set scrollInfo
  1879. } {unchanged}
  1880. test textDisp-19.4 {GetYView procedure} {
  1881.     .t configure -wrap char
  1882.     .t delete 1.0 end
  1883.     .t insert 1.0 "Line 1"
  1884.     update
  1885.     set scrollInfo "unchanged"
  1886.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13} {
  1887.     .t insert end "\nLine $i"
  1888.     }
  1889.     update
  1890.     set scrollInfo
  1891. } {0 0.769231}
  1892. test textDisp-19.5 {GetYView procedure} {
  1893.     .t configure -wrap char
  1894.     .t delete 1.0 end
  1895.     .t insert 1.0 "Line 1"
  1896.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13} {
  1897.     .t insert end "\nLine $i"
  1898.     }
  1899.     .t insert 2.end " is really quite long; in fact it's so long that it wraps three times"
  1900.     update
  1901.     set x $scrollInfo
  1902. } {0 0.538462}
  1903. test textDisp-19.6 {GetYView procedure} {
  1904.     .t configure -wrap char
  1905.     .t delete 1.0 end
  1906.     .t insert 1.0 "Line 1"
  1907.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13} {
  1908.     .t insert end "\nLine $i"
  1909.     }
  1910.     .t insert 2.end " is really quite long; in fact it's so long that it wraps three times"
  1911.     .t yview 4.0
  1912.     update
  1913.     set x $scrollInfo
  1914. } {0.230769 1}
  1915. test textDisp-19.7 {GetYView procedure} {
  1916.     .t configure -wrap char
  1917.     .t delete 1.0 end
  1918.     .t insert 1.0 "Line 1"
  1919.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13} {
  1920.     .t insert end "\nLine $i"
  1921.     }
  1922.     .t insert 2.end " is really quite long; in fact it's so long that it wraps three times"
  1923.     .t yview 2.26
  1924.     update
  1925.     set x $scrollInfo
  1926. } {0.097166 0.692308}
  1927. test textDisp-19.8 {GetYView procedure} {
  1928.     .t configure -wrap char
  1929.     .t delete 1.0 end
  1930.     .t insert 1.0 "Line 1"
  1931.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13} {
  1932.     .t insert end "\nLine $i"
  1933.     }
  1934.     .t insert 10.end " is really quite long; in fact it's so long that it wraps three times"
  1935.     .t yview 2.0
  1936.     update
  1937.     set x $scrollInfo
  1938. } {0.0769231 0.732268}
  1939. test textDisp-19.9 {GetYView procedure} {
  1940.     .t configure -wrap char
  1941.     .t delete 1.0 end
  1942.     .t insert 1.0 "Line 1"
  1943.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  1944.     .t insert end "\nLine $i"
  1945.     }
  1946.     .t yview 3.0
  1947.     update
  1948.     set scrollInfo
  1949. } {0.133333 0.8}
  1950. test textDisp-19.10 {GetYView procedure} {
  1951.     .t configure -wrap char
  1952.     .t delete 1.0 end
  1953.     .t insert 1.0 "Line 1"
  1954.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  1955.     .t insert end "\nLine $i"
  1956.     }
  1957.     .t yview 11.0
  1958.     update
  1959.     set scrollInfo
  1960. } {0.333333 1}
  1961. test textDisp-19.11 {GetYView procedure} {
  1962.     .t configure -wrap word
  1963.     .t delete 1.0 end
  1964.     .t insert 1.0 "Line 1"
  1965.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  1966.     .t insert end "\nLine $i"
  1967.     }
  1968.     .t insert end "\nThis last line wraps around four "
  1969.     .t insert end "times with a bit left on the last line."
  1970.     .t yview insert
  1971.     update
  1972.     set scrollInfo
  1973. } {0.625 1}
  1974. test textDisp-19.12 {GetYView procedure, partially visible last line} {
  1975.     catch {destroy .top}
  1976.     toplevel .top
  1977.     wm geometry .top +0+0
  1978.     text .top.t -width 40 -height 5
  1979.     pack .top.t -expand yes -fill both
  1980.     .top.t insert end "Line 1\nLine 2\nLine 3\nLine 4\nLine 5"
  1981.     update
  1982.     scan [wm geom .top] %dx%d twidth theight
  1983.     wm geom .top ${twidth}x[expr $theight - 3]
  1984.     update
  1985.     .top.t yview
  1986. } {0 0.8}
  1987. test textDisp-19.13 {GetYView procedure, partially visible last line} {
  1988.     catch {destroy .top}
  1989.     toplevel .top
  1990.     wm geometry .top +0+0
  1991.     text .top.t -width 40 -height 5
  1992.     pack .top.t -expand yes -fill both
  1993.     .top.t insert end "Line 1\nLine 2\nLine 3\nLine 4 has enough text to wrap around at least once"
  1994.     update
  1995.     scan [wm geom .top] %dx%d twidth theight
  1996.     wm geom .top ${twidth}x[expr $theight - 3]
  1997.     update
  1998.     .top.t yview
  1999. } {0 0.942308}
  2000. catch {destroy .top}
  2001. test textDisp-19.14 {GetYView procedure} {
  2002.     .t configure -wrap word
  2003.     .t delete 1.0 end
  2004.     .t insert 1.0 "Line 1"
  2005.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  2006.     .t insert end "\nLine $i"
  2007.     }
  2008.     .t insert end "\nThis last line wraps around four "
  2009.     .t insert end "times with a bit left on the last line."
  2010.     update
  2011.     set scrollInfo "unchanged"
  2012.     .t mark set insert 3.0
  2013.     .t tag configure x -background red
  2014.     .t tag add x 1.0 5.0
  2015.     update
  2016.     .t tag delete x
  2017.     set scrollInfo
  2018. } {unchanged}
  2019. test textDisp-19.15 {GetYView procedure} {
  2020.     .t configure -wrap word
  2021.     .t delete 1.0 end
  2022.     .t insert 1.0 "Line 1"
  2023.     foreach i {2 3 4 5 6 7 8 9 10 11 12 13 14 15} {
  2024.     .t insert end "\nLine $i"
  2025.     }
  2026.     .t insert end "\nThis last line wraps around four "
  2027.     .t insert end "times with a bit left on the last line."
  2028.     update
  2029.     .t configure -yscrollcommand scrollError
  2030.     proc tkerror args {
  2031.     global x errorInfo errorCode
  2032.     set x [list $args $errorInfo $errorCode]
  2033.     }
  2034.     .t delete 1.0 end
  2035.     update
  2036.     rename tkerror {}
  2037.     .t configure -yscrollcommand scroll
  2038.     set x
  2039. } {{{scrolling error}} {scrolling error
  2040.     while executing
  2041. "error "scrolling error""
  2042.     (procedure "scrollError" line 2)
  2043.     invoked from within
  2044. "scrollError 0 1"
  2045.     (vertical scrolling command executed by text)} NONE}
  2046.  
  2047. .t delete 1.0 end
  2048. .t insert end "Line 1"
  2049. for {set i 2} {$i <= 200} {incr i} {
  2050.     .t insert end "\nLine $i"
  2051. }
  2052. .t configure -wrap word
  2053. .t delete 50.0 51.0
  2054. .t insert 50.0 "This is a long line, one that will wrap around twice.\n"
  2055. test textDisp-20.1 {FindDLine} {
  2056.     .t yview 48.0
  2057.     list [.t dlineinfo 46.0] [.t dlineinfo 47.0] [.t dlineinfo 49.0] \
  2058.         [.t dlineinfo 58.0]
  2059. } {{} {} {3 16 49 13 10} {}}
  2060. test textDisp-20.2 {FindDLine} {
  2061.     .t yview 100.0
  2062.     .t yview -pickplace 53.0
  2063.     list [.t dlineinfo 50.0] [.t dlineinfo 50.14] [.t dlineinfo 50.15]
  2064. } {{} {} {3 3 140 13 10}}
  2065. test textDisp-20.3 {FindDLine} {
  2066.     .t yview 100.0
  2067.     .t yview 49.0
  2068.     list [.t dlineinfo 50.0] [.t dlineinfo 50.20] [.t dlineinfo 57.0]
  2069. } {{3 16 105 13 10} {3 29 140 13 10} {}}
  2070. test textDisp-20.4 {FindDLine} {
  2071.     .t yview 100.0
  2072.     .t yview 42.0
  2073.     list [.t dlineinfo 50.0] [.t dlineinfo 50.20] [.t dlineinfo 50.40]
  2074. } {{3 107 105 13 10} {3 120 140 13 10} {}}
  2075. .t config -wrap none
  2076. test textDisp-20.5 {FindDLine} {
  2077.     .t yview 100.0
  2078.     .t yview 48.0
  2079.     list [.t dlineinfo 50.0] [.t dlineinfo 50.20] [.t dlineinfo 50.40]
  2080. } {{3 29 371 13 10} {3 29 371 13 10} {3 29 371 13 10}}
  2081.  
  2082. .t config -wrap word
  2083. test textDisp-21.1 {TkTextPixelIndex} {
  2084.     .t yview 48.0
  2085.     list [.t index @-10,-10] [.t index @6,6] [.t index @22,6] \
  2086.         [.t index @102,6] [.t index @38,55] [.t index @44,67]
  2087. } {48.0 48.0 48.2 48.7 50.40 50.40}
  2088. .t insert end \n
  2089. test textDisp-21.2 {TkTextPixelIndex} {
  2090.     .t yview 195.0
  2091.     list [.t index @11,70] [.t index @11,84] [.t index @11,102] \
  2092.         [.t index @11,1002]
  2093. } {197.1 198.1 199.1 201.0}
  2094. test textDisp-21.3 {TkTextPixelIndex, horizontal scrolling} {
  2095.     .t configure -wrap none
  2096.     .t delete 1.0 end
  2097.     .t insert end "12345\n"
  2098.     .t insert end "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2099.     .t xview scroll 2 units
  2100.     list [.t index @-5,7] [.t index @5,7] [.t index @33,20]
  2101. } {1.2 1.2 2.6}
  2102.  
  2103. .t delete 1.0 end
  2104. .t insert end "Line 1"
  2105. for {set i 2} {$i <= 200} {incr i} {
  2106.     .t insert end "\nLine $i"
  2107. }
  2108. .t configure -wrap word
  2109. .t delete 50.0 51.0
  2110. .t insert 50.0 "This is a long line, one that will wrap around twice.\n"
  2111. update
  2112. .t tag add x 50.1
  2113. test textDisp-22.1 {TkTextCharBbox} {
  2114.     .t config -wrap word
  2115.     .t yview 48.0
  2116.     list [.t bbox 47.2] [.t bbox 48.0] [.t bbox 50.5] [.t bbox 50.40] \
  2117.         [.t bbox 58.0]
  2118. } {{} {3 3 7 13} {38 29 7 13} {38 55 7 13} {}}
  2119. test textDisp-22.2 {TkTextCharBbox} {
  2120.     .t config -wrap none
  2121.     .t yview 48.0
  2122.     list [.t bbox 50.5] [.t bbox 50.40] [.t bbox 57.0]
  2123. } {{38 29 7 13} {} {3 120 7 13}}
  2124. test textDisp-22.3 {TkTextCharBbox, cut-off lines} {
  2125.     .t config -wrap char
  2126.     .t yview 10.0
  2127.     wm geom . ${width}x[expr $height-1]
  2128.     update
  2129.     list [.t bbox 19.1] [.t bbox 20.1]
  2130. } {{10 120 7 13} {10 133 7 3}}
  2131. test textDisp-22.4 {TkTextCharBbox, cut-off lines} {
  2132.     .t config -wrap char
  2133.     .t yview 10.0
  2134.     wm geom . ${width}x[expr $height+1]
  2135.     update
  2136.     list [.t bbox 19.1] [.t bbox 20.1]
  2137. } {{10 120 7 13} {10 133 7 5}}
  2138. test textDisp-22.5 {TkTextCharBbox, cut-off char} {
  2139.     .t config -wrap none
  2140.     .t yview 10.0
  2141.     wm geom . [expr $width-95]x$height
  2142.     update
  2143.     .t bbox 15.6
  2144. } {45 68 7 13}
  2145. test textDisp-22.6 {TkTextCharBbox, line visible but not char} {
  2146.     .t config -wrap char
  2147.     .t yview 10.0
  2148.     .t tag add big 20.2 20.5
  2149.     wm geom . ${width}x[expr $height+3]
  2150.     update
  2151.     list [.t bbox 19.1] [.t bbox 20.1] [.t bbox 20.2]
  2152. } {{10 120 7 13} {} {17 133 14 7}}
  2153. wm geom . {}
  2154. update
  2155. test textDisp-22.7 {TkTextCharBbox, different character sizes} {
  2156.     .t config -wrap char
  2157.     .t yview 10.0
  2158.     .t tag add big 12.2 12.5
  2159.     update
  2160.     list [.t bbox 12.1] [.t bbox 12.2]
  2161. } {{10 41 7 13} {17 29 14 27}}
  2162. .t tag remove big 1.0 end
  2163. test textDisp-22.8 {TkTextCharBbox, horizontal scrolling} {
  2164.     .t configure -wrap none
  2165.     .t delete 1.0 end
  2166.     .t insert end "12345\n"
  2167.     .t insert end "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2168.     .t xview scroll 4 units
  2169.     list [.t bbox 1.3] [.t bbox 1.4] [.t bbox 2.3] [.t bbox 2.4] \
  2170.         [.t bbox 2.23] [.t bbox 2.24]
  2171. } {{} {3 3 7 13} {} {3 16 7 13} {136 16 7 13} {}}
  2172. test textDisp-22.9 {TkTextCharBbox, handling of spacing} {
  2173.     .t configure -wrap char
  2174.     .t delete 1.0 end
  2175.     .t insert 1.0 "abcdefghijkl\nmnopqrstuvwzyz"
  2176.     .t tag configure spacing -spacing1 8 -spacing3 2
  2177.     .t tag add spacing 1.0 end
  2178.     frame .t.f1 -width 10 -height 4 -bg black
  2179.     frame .t.f2 -width 10 -height 4 -bg black
  2180.     frame .t.f3 -width 10 -height 4 -bg black
  2181.     frame .t.f4 -width 10 -height 4 -bg black
  2182.     .t window create 1.3 -window .t.f1 -align top
  2183.     .t window create 1.7 -window .t.f2 -align center
  2184.     .t window create 2.1 -window .t.f3 -align bottom
  2185.     .t window create 2.10 -window .t.f4 -align baseline
  2186.     update
  2187.     list [.t bbox .t.f1] [.t bbox .t.f2] [.t bbox .t.f3] [.t bbox .t.f4] \
  2188.         [.t bbox 1.1] [.t bbox 2.9]
  2189. } {{24 11 10 4} {55 15 10 4} {10 43 10 4} {76 40 10 4} {10 11 7 13} {69 34 7 13}}
  2190. .t tag delete spacing
  2191.  
  2192. .t delete 1.0 end
  2193. .t insert end "Line 1"
  2194. for {set i 2} {$i <= 200} {incr i} {
  2195.     .t insert end "\nLine $i"
  2196. }
  2197. .t configure -wrap word
  2198. .t delete 50.0 51.0
  2199. .t insert 50.0 "This is a long line, one that will wrap around twice.\n"
  2200. update
  2201. test textDisp-23.1 {TkTextDLineInfo} {
  2202.     .t config -wrap word
  2203.     .t yview 48.0
  2204.     list [.t dlineinfo 47.3] [.t dlineinfo 48.0] [.t dlineinfo 50.40] \
  2205.         [.t dlineinfo 56.0]
  2206. } {{} {3 3 49 13 10} {3 55 126 13 10} {}}
  2207. test textDisp-23.2 {TkTextDLineInfo} {
  2208.     .t config -bd 4 -wrap word
  2209.     update
  2210.     .t yview 48.0
  2211.     .t dlineinfo 50.40
  2212. } {7 59 126 13 10}
  2213. .t config -bd 0
  2214. test textDisp-23.3 {TkTextDLineInfo} {
  2215.     .t config -wrap none
  2216.     update
  2217.     .t yview 48.0
  2218.     list [.t dlineinfo 50.40] [.t dlineinfo 57.3]
  2219. } {{3 29 371 13 10} {3 120 49 13 10}}
  2220. test textDisp-23.4 {TkTextDLineInfo, cut-off lines} {
  2221.     .t config -wrap char
  2222.     .t yview 10.0
  2223.     wm geom . ${width}x[expr $height-1]
  2224.     update
  2225.     list [.t dlineinfo 19.0] [.t dlineinfo 20.0]
  2226. } {{3 120 49 13 10} {3 133 49 3 10}}
  2227. test textDisp-23.5 {TkTextDLineInfo, cut-off lines} {
  2228.     .t config -wrap char
  2229.     .t yview 10.0
  2230.     wm geom . ${width}x[expr $height+1]
  2231.     update
  2232.     list [.t dlineinfo 19.0] [.t dlineinfo 20.0]
  2233. } {{3 120 49 13 10} {3 133 49 5 10}}
  2234. wm geom . {}
  2235. update
  2236. test textDisp-23.6 {TkTextDLineInfo, horizontal scrolling} {
  2237.     .t config -wrap none
  2238.     .t delete 1.0 end
  2239.     .t insert end "First line\n"
  2240.     .t insert end "Second line is a very long one that doesn't all fit.\n"
  2241.     .t insert end "Third"
  2242.     .t xview scroll 6 units
  2243.     update
  2244.     list [.t dlineinfo 1.0] [.t dlineinfo 2.0] [.t dlineinfo 3.0]
  2245. } {{-39 3 70 13 10} {-39 16 364 13 10} {-39 29 35 13 10}}
  2246. .t xview moveto 0
  2247. test textDisp-23.7 {TkTextDLineInfo, centering} {
  2248.     .t config -wrap word
  2249.     .t delete 1.0 end
  2250.     .t insert end "First line\n"
  2251.     .t insert end "Second line is a very long one that doesn't all fit.\n"
  2252.     .t insert end "Third"
  2253.     .t tag configure x -justify center
  2254.     .t tag configure y -justify right
  2255.     .t tag add x 1.0
  2256.     .t tag add y 3.0
  2257.     list [.t dlineinfo 1.0] [.t dlineinfo 2.0] [.t dlineinfo 3.0]
  2258. } {{38 3 70 13 10} {3 16 119 13 10} {108 55 35 13 10}}
  2259. .t tag delete x y
  2260.  
  2261. test textDisp-24.1 {TkTextCharLayoutProc} {
  2262.     .t configure -wrap char
  2263.     .t delete 1.0 end
  2264.     .t insert 1.0 "abcdefghijklmnopqrstuvwxyz"
  2265.     list [.t bbox 1.19] [.t bbox 1.20]
  2266. } {{136 3 7 13} {3 16 7 13}}
  2267. test textDisp-24.2 {TkTextCharLayoutProc} {
  2268.     .t configure -wrap char
  2269.     .t delete 1.0 end
  2270.     .t insert 1.0 "abcdefghijklmnopqrstuvwxyz"
  2271.     wm geom . [expr $width+1]x$height
  2272.     update
  2273.     list [.t bbox 1.19] [.t bbox 1.20]
  2274. } {{136 3 12 13} {3 16 7 13}}
  2275. test textDisp-24.3 {TkTextCharLayoutProc} {
  2276.     .t configure -wrap char
  2277.     .t delete 1.0 end
  2278.     .t insert 1.0 "abcdefghijklmnopqrstuvwxyz"
  2279.     wm geom . [expr $width-1]x$height
  2280.     update
  2281.     list [.t bbox 1.19] [.t bbox 1.20]
  2282. } {{136 3 10 13} {3 16 7 13}}
  2283. test textDisp-24.4 {TkTextCharLayoutProc, newline not visible} {
  2284.     .t configure -wrap char
  2285.     .t delete 1.0 end
  2286.     .t insert 1.0 01234567890123456789\n012345678901234567890
  2287.     wm geom . {}
  2288.     update
  2289.     list [.t bbox 1.19] [.t bbox 1.20] [.t bbox 2.20]
  2290. } {{136 3 7 13} {143 3 0 13} {3 29 7 13}}
  2291. test textDisp-24.5 {TkTextCharLayoutProc, char doesn't fit, newline not visible} {
  2292.     .t configure -wrap char
  2293.     .t delete 1.0 end
  2294.     .t insert 1.0 0\n1\n
  2295.     wm geom . 110x$height
  2296.     update
  2297.     list [.t bbox 1.0] [.t bbox 1.1] [.t bbox 2.0]
  2298. } {{3 3 4 13} {7 3 0 13} {3 16 4 13}}
  2299. test textDisp-24.6 {TkTextCharLayoutProc, line ends with space} {
  2300.     .t configure -wrap char
  2301.     .t delete 1.0 end
  2302.     .t insert 1.0 "a b c d e f g h i j k l m n o p"
  2303.     wm geom . {}
  2304.     update
  2305.     list [.t bbox 1.19] [.t bbox 1.20]
  2306. } {{136 3 7 13} {3 16 7 13}}
  2307. test textDisp-24.7 {TkTextCharLayoutProc, line ends with space} {
  2308.     .t configure -wrap char
  2309.     .t delete 1.0 end
  2310.     .t insert 1.0 "a b c d e f g h i j k l m n o p"
  2311.     wm geom . [expr $width+1]x$height
  2312.     update
  2313.     list [.t bbox 1.19] [.t bbox 1.20]
  2314. } {{136 3 12 13} {3 16 7 13}}
  2315. test textDisp-24.8 {TkTextCharLayoutProc, line ends with space} {
  2316.     .t configure -wrap char
  2317.     .t delete 1.0 end
  2318.     .t insert 1.0 "a b c d e f g h i j k l m n o p"
  2319.     wm geom . [expr $width-1]x$height
  2320.     update
  2321.     list [.t bbox 1.19] [.t bbox 1.20]
  2322. } {{136 3 10 13} {3 16 7 13}}
  2323. test textDisp-24.9 {TkTextCharLayoutProc, line ends with space} {
  2324.     .t configure -wrap char
  2325.     .t delete 1.0 end
  2326.     .t insert 1.0 "a b c d e f g h i j k l m n o p"
  2327.     wm geom . [expr $width-6]x$height
  2328.     update
  2329.     list [.t bbox 1.19] [.t bbox 1.20]
  2330. } {{136 3 5 13} {3 16 7 13}}
  2331. test textDisp-24.10 {TkTextCharLayoutProc, line ends with space} {
  2332.     .t configure -wrap char
  2333.     .t delete 1.0 end
  2334.     .t insert 1.0 "a b c d e f g h i j k l m n o p"
  2335.     wm geom . [expr $width-7]x$height
  2336.     update
  2337.     list [.t bbox 1.19] [.t bbox 1.20]
  2338. } {{136 3 4 13} {3 16 7 13}}
  2339. test textDisp-24.11 {TkTextCharLayoutProc, tab causes wrap} {
  2340.     .t configure -wrap char
  2341.     .t delete 1.0 end
  2342.     .t insert 1.0 "abcdefghi"
  2343.     .t mark set insert 1.4
  2344.     .t insert insert \t\t\t
  2345.     list [.t bbox {insert -1c}] [.t bbox insert]
  2346. } {{115 3 25 13} {3 16 7 13}}
  2347. test textDisp-24.12 {TkTextCharLayoutProc, -wrap none} {
  2348.     .t configure -wrap none
  2349.     .t delete 1.0 end
  2350.     .t insert 1.0 "abcdefghijklmnopqrstuvwxyz"
  2351.     wm geom . {}
  2352.     update
  2353.     list [.t bbox 1.19] [.t bbox 1.20]
  2354. } {{136 3 7 13} {}}
  2355. test textDisp-24.13 {TkTextCharLayoutProc, -wrap none} {
  2356.     .t configure -wrap none
  2357.     .t delete 1.0 end
  2358.     .t insert 1.0 "abcdefghijklmnopqrstuvwxyz"
  2359.     wm geom . [expr $width+1]x$height
  2360.     update
  2361.     list [.t bbox 1.19] [.t bbox 1.20]
  2362. } {{136 3 7 13} {143 3 5 13}}
  2363. test textDisp-24.14 {TkTextCharLayoutProc, -wrap none} {
  2364.     .t configure -wrap none
  2365.     .t delete 1.0 end
  2366.     .t insert 1.0 "abcdefghijklmnopqrstuvwxyz"
  2367.     wm geom . [expr $width-1]x$height
  2368.     update
  2369.     list [.t bbox 1.19] [.t bbox 1.20]
  2370. } {{136 3 7 13} {143 3 3 13}}
  2371. test textDisp-24.15 {TkTextCharLayoutProc, no chars fit} {
  2372.     .t configure -wrap char
  2373.     .t delete 1.0 end
  2374.     .t insert 1.0 "abcdefghijklmnopqrstuvwxyz"
  2375.     wm geom . 103x$height
  2376.     update
  2377.     list [.t bbox 1.0] [.t bbox 1.1] [.t bbox 1.2]
  2378. } {{3 3 1 13} {3 16 1 13} {3 29 1 13}}
  2379. test textDisp-24.16 {TkTextCharLayoutProc, -wrap word} {
  2380.     .t configure -wrap word
  2381.     .t delete 1.0 end
  2382.     .t insert 1.0 "This is a line that wraps around"
  2383.     wm geom . {}
  2384.     update
  2385.     list [.t bbox 1.19] [.t bbox 1.20]
  2386. } {{136 3 7 13} {3 16 7 13}}
  2387. test textDisp-24.17 {TkTextCharLayoutProc, -wrap word} {
  2388.     .t configure -wrap word
  2389.     .t delete 1.0 end
  2390.     .t insert 1.0 "xThis is a line that wraps around"
  2391.     wm geom . {}
  2392.     update
  2393.     list [.t bbox 1.14] [.t bbox 1.15] [.t bbox 1.16]
  2394. } {{101 3 7 13} {108 3 35 13} {3 16 7 13}}
  2395. test textDisp-24.18 {TkTextCharLayoutProc, -wrap word} {
  2396.     .t configure -wrap word
  2397.     .t delete 1.0 end
  2398.     .t insert 1.0 "xxThis is a line that wraps around"
  2399.     wm geom . {}
  2400.     update
  2401.     list [.t bbox 1.14] [.t bbox 1.15] [.t bbox 1.16]
  2402. } {{101 3 7 13} {108 3 7 13} {115 3 28 13}}
  2403. test textDisp-24.19 {TkTextCharLayoutProc, vertical offset} {
  2404.     .t configure -wrap none
  2405.     .t delete 1.0 end
  2406.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  2407.     set result {}
  2408.     lappend result [.t bbox 2.1] [.t dlineinfo 2.1]
  2409.     .t tag configure up -offset 6
  2410.     .t tag add up 2.1
  2411.     lappend result [.t bbox 2.1] [.t dlineinfo 2.1]
  2412.     .t tag configure  up -offset -2
  2413.     lappend result [.t bbox 2.1] [.t dlineinfo 2.1]
  2414.     .t tag delete up
  2415.     set result
  2416. } {{10 16 7 13} {3 16 42 13 10} {10 16 7 13} {3 16 42 19 16} {10 18 7 13} {3 16 42 15 10}}
  2417. .t configure -width 30
  2418. update
  2419. test textDisp-24.20 {TkTextCharLayoutProc, word breaks} {
  2420.     .t configure -wrap word
  2421.     .t delete 1.0 end
  2422.     .t insert 1.0 "Sample text xxxxxxx yyyyy zzzzzzz qqqqq rrrr ssss tt u vvvvv"
  2423.     frame .t.f -width 30 -height 20 -bg black
  2424.     .t window create 1.36 -window .t.f
  2425.     .t bbox 1.26
  2426. } {3 19 7 13}
  2427. test textDisp-24.21 {TkTextCharLayoutProc, word breaks} {
  2428.     .t configure -wrap word
  2429.     .t delete 1.0 end
  2430.     frame .t.f -width 30 -height 20 -bg black
  2431.     .t insert 1.0 "Sample text xxxxxxx yyyyyyy"
  2432.     .t window create end -window .t.f
  2433.     .t insert end "zzzzzzz qqqqq rrrr ssss tt u vvvvv"
  2434.     .t bbox 1.28
  2435. } {33 19 7 13}
  2436. test textDisp-24.22 {TkTextCharLayoutProc, word breaks} {
  2437.     .t configure -wrap word
  2438.     .t delete 1.0 end
  2439.     frame .t.f -width 30 -height 20 -bg black
  2440.     .t insert 1.0 "Sample text xxxxxxx yyyyyyy "
  2441.     .t insert end "zzzzzzz qqqqq rrrr ssss tt"
  2442.     .t window create end -window .t.f
  2443.     .t insert end "u vvvvv"
  2444.     .t bbox .t.f
  2445. } {3 29 30 20}
  2446. catch {destroy .t.f}
  2447. .t configure -width 20
  2448. update
  2449. test textDisp-24.23 {TkTextCharLayoutProc, justification and tabs} {
  2450.     .t delete 1.0 end
  2451.     .t tag configure x -justify center
  2452.     .t insert 1.0 aa\tbb\tcc\tdd\t
  2453.     .t tag add x 1.0 end
  2454.     list [.t bbox 1.0] [.t bbox 1.10]
  2455. } {{45 3 7 13} {94 3 7 13}}
  2456.  
  2457. .t configure -width 40 -bd 0 -relief flat -highlightthickness 0 -padx 0 \
  2458.     -tabs 100
  2459. update
  2460. test textDisp-25.1 {CharBboxProc procedure, check tab width} {
  2461.     .t delete 1.0 end
  2462.     .t insert 1.0 abc\td\tfgh
  2463.     list [.t bbox 1.3] [.t bbox 1.5] [.t bbox 1.6]
  2464. } {{21 1 79 13} {107 1 93 13} {200 1 7 13}}
  2465.  
  2466. .t configure -width 40 -bd 0 -relief flat -highlightthickness 0 -padx 0 \
  2467.     -tabs {}
  2468. update
  2469. test textDisp-26.1 {AdjustForTab procedure, no tabs} {
  2470.     .t delete 1.0 end
  2471.     .t insert 1.0 a\tbcdefghij\tc\td
  2472.     list [lindex [.t bbox 1.2] 0] [lindex [.t bbox 1.12] 0] \
  2473.         [lindex [.t bbox 1.14] 0]
  2474. } {56 168 224}
  2475. test textDisp-26.2 {AdjustForTab procedure, not enough tabs specified} {
  2476.     .t delete 1.0 end
  2477.     .t insert 1.0 a\tb\tc\td
  2478.     .t tag delete x
  2479.     .t tag configure x -tabs 40
  2480.     .t tag add x 1.0 end
  2481.     list [lindex [.t bbox 1.2] 0] [lindex [.t bbox 1.4] 0] \
  2482.         [lindex [.t bbox 1.6] 0]
  2483. } {40 80 120}
  2484. test textDisp-26.3 {AdjustForTab procedure, not enough tabs specified} {
  2485.     .t delete 1.0 end
  2486.     .t insert 1.0 a\tb\tc\td\te
  2487.     .t tag delete x
  2488.     .t tag configure x -tabs {40 70 right}
  2489.     .t tag add x 1.0 end
  2490.     list [lindex [.t bbox 1.2] 0] \
  2491.         [expr [lindex [.t bbox 1.4] 0] + [lindex [.t bbox 1.4] 2]] \
  2492.         [expr [lindex [.t bbox 1.6] 0] + [lindex [.t bbox 1.6] 2]] \
  2493.         [expr [lindex [.t bbox 1.8] 0] + [lindex [.t bbox 1.8] 2]]
  2494. } {40 70 100 130}
  2495. test textDisp-26.4 {AdjustForTab procedure, different alignments} {
  2496.     .t delete 1.0 end
  2497.     .t insert 1.0 a\tbc\tde\tfg\thi
  2498.     .t tag delete x
  2499.     .t tag configure x -tabs {40 center 80 left 130 right}
  2500.     .t tag add x 1.0 end
  2501.     .t tag add y 1.2
  2502.     .t tag add y 1.5
  2503.     .t tag add y 1.8
  2504.     list [lindex [.t bbox 1.3] 0] [lindex [.t bbox 1.5] 0] \
  2505.         [lindex [.t bbox 1.10] 0]
  2506. } {40 80 130}
  2507. test textDisp-26.5 {AdjustForTab procedure, numeric alignment} {
  2508.     .t delete 1.0 end
  2509.     .t insert 1.0 a\t1.234
  2510.     .t tag delete x
  2511.     .t tag configure x -tabs {120 numeric}
  2512.     .t tag add x 1.0 end
  2513.     .t tag add y 1.2
  2514.     .t tag add y 1.5
  2515.     lindex [.t bbox 1.3] 0
  2516. } {120}
  2517. test textDisp-26.6 {AdjustForTab procedure, numeric alignment} {
  2518.     .t delete 1.0 end
  2519.     .t insert 1.0 a\t1,456.234
  2520.     .t tag delete x
  2521.     .t tag configure x -tabs {120 numeric}
  2522.     .t tag add x 1.0 end
  2523.     .t tag add y 1.2
  2524.     lindex [.t bbox 1.7] 0
  2525. } {120}
  2526. test textDisp-26.7 {AdjustForTab procedure, numeric alignment} {
  2527.     .t delete 1.0 end
  2528.     .t insert 1.0 a\t1.456.234,7
  2529.     .t tag delete x
  2530.     .t tag configure x -tabs {120 numeric}
  2531.     .t tag add x 1.0 end
  2532.     .t tag add y 1.2
  2533.     lindex [.t bbox 1.11] 0
  2534. } {120}
  2535. test textDisp-26.8 {AdjustForTab procedure, numeric alignment} {
  2536.     .t delete 1.0 end
  2537.     .t insert 1.0 a\ttest
  2538.     .t tag delete x
  2539.     .t tag configure x -tabs {120 numeric}
  2540.     .t tag add x 1.0 end
  2541.     .t tag add y 1.2
  2542.     lindex [.t bbox 1.6] 0
  2543. } {120}
  2544. test textDisp-26.9 {AdjustForTab procedure, numeric alignment} {
  2545.     .t delete 1.0 end
  2546.     .t insert 1.0 a\t1234
  2547.     .t tag delete x
  2548.     .t tag configure x -tabs {120 numeric}
  2549.     .t tag add x 1.0 end
  2550.     .t tag add y 1.2
  2551.     lindex [.t bbox 1.6] 0
  2552. } {120}
  2553. test textDisp-26.10 {AdjustForTab procedure, numeric alignment} {
  2554.     .t delete 1.0 end
  2555.     .t insert 1.0 a\t1.234567
  2556.     .t tag delete x
  2557.     .t tag configure x -tabs {120 numeric}
  2558.     .t tag add x 1.0 end
  2559.     .t tag add y 1.5
  2560.     lindex [.t bbox 1.3] 0
  2561. } {120}
  2562. test textDisp-26.11 {AdjustForTab procedure, numeric alignment} {
  2563.     .t delete 1.0 end
  2564.     .t insert 1.0 a\tx=1.234567
  2565.     .t tag delete x
  2566.     .t tag configure x -tabs {120 numeric}
  2567.     .t tag add x 1.0 end
  2568.     .t tag add y 1.7
  2569.     .t tag add y 1.9
  2570.     lindex [.t bbox 1.5] 0
  2571. } {120}
  2572. test textDisp-26.12 {AdjustForTab procedure, adjusting chunks} {
  2573.     .t delete 1.0 end
  2574.     .t insert 1.0 a\tx1.234567
  2575.     .t tag delete x
  2576.     .t tag configure x -tabs {120 numeric}
  2577.     .t tag add x 1.0 end
  2578.     .t tag add y 1.7
  2579.     .t tag add y 1.9
  2580.     button .b -text "="
  2581.     .t window create 1.3 -window .b
  2582.     update
  2583.     lindex [.t bbox 1.5] 0
  2584. } {120}
  2585. test textDisp-26.13 {AdjustForTab procedure, not enough space} {
  2586.     .t delete 1.0 end
  2587.     .t insert 1.0 "abc\txyz\tqrs\txyz\t0"
  2588.     .t tag delete x
  2589.     .t tag configure x -tabs {10 30 center 50 right 120}
  2590.     .t tag add x 1.0 end
  2591.     list [lindex [.t bbox 1.4] 0] [lindex [.t bbox 1.8] 0] \
  2592.         [lindex [.t bbox 1.12] 0] [lindex [.t bbox 1.16] 0]
  2593. } {28 56 84 120}
  2594.  
  2595. .t configure -width 20 -bd 2 -highlightthickness 2 -relief sunken -tabs {} \
  2596.     -wrap char
  2597. update
  2598. test textDisp-27.1 {SizeOfTab procedure, old-style tabs} {
  2599.     .t delete 1.0 end
  2600.     .t insert 1.0 a\tbcdefghij\tc\td
  2601.     list [.t bbox 1.2] [.t bbox 1.10] [.t bbox 1.12]
  2602. } {{60 5 7 13} {116 5 7 13} {4 18 7 13}}
  2603. test textDisp-27.2 {SizeOfTab procedure, choosing tabX and alignment} {
  2604.     .t delete 1.0 end
  2605.     .t insert 1.0 a\tbcd
  2606.     .t tag delete x
  2607.     .t tag configure x -tabs 120
  2608.     .t tag add x 1.0 end
  2609.     list [.t bbox 1.3] [.t bbox 1.4]
  2610. } {{131 5 13 13} {4 18 7 13}}
  2611. test textDisp-27.3 {SizeOfTab procedure, choosing tabX and alignment} {
  2612.     .t delete 1.0 end
  2613.     .t insert 1.0 a\t\t\tbcd
  2614.     .t tag delete x
  2615.     .t tag configure x -tabs 40
  2616.     .t tag add x 1.0 end
  2617.     list [.t bbox 1.5] [.t bbox 1.6]
  2618. } {{131 5 13 13} {4 18 7 13}}
  2619. test textDisp-27.4 {SizeOfTab procedure, choosing tabX and alignment} {
  2620.     .t delete 1.0 end
  2621.     .t insert 1.0 a\t\t\tbcd
  2622.     .t tag delete x
  2623.     .t tag configure x -tabs {20 center 70 left}
  2624.     .t tag add x 1.0 end
  2625.     list [.t bbox 1.5] [.t bbox 1.6]
  2626. } {{131 5 13 13} {4 18 7 13}}
  2627. test textDisp-27.5 {SizeOfTab procedure, center alignment} {
  2628.     .t delete 1.0 end
  2629.     .t insert 1.0 a\txyzzyabc
  2630.     .t tag delete x
  2631.     .t tag configure x -tabs {120 center}
  2632.     .t tag add x 1.0 end
  2633.     list [.t bbox 1.6] [.t bbox 1.7]
  2634. } {{135 5 9 13} {4 18 7 13}}
  2635. test textDisp-27.6 {SizeOfTab procedure, center alignment} {
  2636.     .t delete 1.0 end
  2637.     .t insert 1.0 a\txyzzyabc
  2638.     .t tag delete x
  2639.     .t tag configure x -tabs {150 center}
  2640.     .t tag add x 1.0 end
  2641.     list [.t bbox 1.6] [.t bbox 1.7]
  2642. } {{32 18 7 13} {39 18 7 13}}
  2643. test textDisp-27.7 {SizeOfTab procedure, center alignment, wrap -none (potential numerical problems)} {
  2644.     .t delete 1.0 end
  2645.     .t configure -tabs {1c 2c center 3c 4c} -wrap none -width 40
  2646.     .t insert 1.0 a\tb\tc\td\te\n012345678934567890a\tbb\tcc\tdd
  2647.     update
  2648.     .t bbox 2.24
  2649. } {172 18 7 13}
  2650. .t configure -wrap char -tabs {} -width 20
  2651. update
  2652. test textDisp-27.8 {SizeOfTab procedure, right alignment} {
  2653.     .t delete 1.0 end
  2654.     .t insert 1.0 a\t\txyzzyabc
  2655.     .t tag delete x
  2656.     .t tag configure x -tabs {100 left 140 right}
  2657.     .t tag add x 1.0 end
  2658.     list [.t bbox 1.6] [.t bbox 1.7]
  2659. } {{137 5 7 13} {4 18 7 13}}
  2660. test textDisp-27.9 {SizeOfTab procedure, left alignment} {
  2661.     .t delete 1.0 end
  2662.     .t insert 1.0 a\txyzzyabc
  2663.     .t tag delete x
  2664.     .t tag configure x -tabs {120}
  2665.     .t tag add x 1.0 end
  2666.     list [.t bbox 1.3] [.t bbox 1.4]
  2667. } {{131 5 13 13} {4 18 7 13}}
  2668. test textDisp-27.10 {SizeOfTab procedure, numeric alignment} {
  2669.     .t delete 1.0 end
  2670.     .t insert 1.0 a\t123.4
  2671.     .t tag delete x
  2672.     .t tag configure x -tabs {120 numeric}
  2673.     .t tag add x 1.0 end
  2674.     list [.t bbox 1.3] [.t bbox 1.4]
  2675. } {{117 5 27 13} {4 18 7 13}}
  2676. test textDisp-27.11 {SizeOfTab procedure, making tabs at least as wide as a space} {
  2677.     .t delete 1.0 end
  2678.     .t insert 1.0 abc\tdefghijklmnopqrst
  2679.     .t tag delete x
  2680.     .t tag configure x -tabs {120}
  2681.     .t tag add x 1.0 end
  2682.     list [.t bbox 1.5] [.t bbox 1.6]
  2683. } {{131 5 13 13} {4 18 7 13}}
  2684.  
  2685. proc bizarre_scroll args {
  2686.     .t2.t delete 5.0 end
  2687. }
  2688. test textDisp-28.1 {"yview" option with bizarre scroll command} {
  2689.     catch {destroy .t2}
  2690.     toplevel .t2
  2691.     text .t2.t -width 40 -height 4
  2692.     .t2.t insert end "1\n2\n3\n4\n5\n6\n7\n8\n"
  2693.     pack .t2.t
  2694.     wm geometry .t2 +0+0
  2695.     update
  2696.     .t2.t configure -yscrollcommand bizarre_scroll
  2697.     .t2.t yview 100.0
  2698.     set result [.t2.t index @0,0]
  2699.     update
  2700.     lappend result [.t2.t index @0,0]
  2701. } {6.0 1.0}
  2702.  
  2703. test textDisp-29.1 {miscellaneous: lines wrap but are still too long} {
  2704.     catch {destroy .t2}
  2705.     toplevel .t2
  2706.     wm geometry .t2 +0+0
  2707.     text .t2.t -width 20 -height 10 -font $fixedFont \
  2708.         -wrap char -xscrollcommand ".t2.s set"
  2709.     pack .t2.t -side top
  2710.     scrollbar .t2.s -orient horizontal -command ".t2.t xview"
  2711.     pack .t2.s -side bottom -fill x
  2712.     .t2.t insert end 123
  2713.     frame .t2.t.f -width 300 -height 50 -bd 2 -relief raised
  2714.     .t2.t window create 1.1 -window .t2.t.f
  2715.     update
  2716.     list [.t2.t xview] [winfo geom .t2.t.f] [.t2.t bbox 1.3]
  2717. } {{0 0.466667} 300x50+5+18 {12 68 7 13}}
  2718. test textDisp-29.2 {miscellaneous: lines wrap but are still too long} {
  2719.     catch {destroy .t2}
  2720.     toplevel .t2
  2721.     wm geometry .t2 +0+0
  2722.     text .t2.t -width 20 -height 10 -font $fixedFont \
  2723.         -wrap char -xscrollcommand ".t2.s set"
  2724.     pack .t2.t -side top
  2725.     scrollbar .t2.s -orient horizontal -command ".t2.t xview"
  2726.     pack .t2.s -side bottom -fill x
  2727.     .t2.t insert end 123
  2728.     frame .t2.t.f -width 300 -height 50 -bd 2 -relief raised
  2729.     .t2.t window create 1.1 -window .t2.t.f
  2730.     .t2.t xview scroll 1 unit
  2731.     update
  2732.     list [.t2.t xview] [winfo geom .t2.t.f] [.t2.t bbox 1.3]
  2733. } {{0.0233333 0.49} 300x50+-2+18 {5 68 7 13}}
  2734. test textDisp-29.3 {miscellaneous: lines wrap but are still too long} {
  2735.     catch {destroy .t2}
  2736.     toplevel .t2
  2737.     wm geometry .t2 +0+0
  2738.     text .t2.t -width 20 -height 10 -font $fixedFont \
  2739.         -wrap char -xscrollcommand ".t2.s set"
  2740.     pack .t2.t -side top
  2741.     scrollbar .t2.s -orient horizontal -command ".t2.t xview"
  2742.     pack .t2.s -side bottom -fill x
  2743.     .t2.t insert end 123
  2744.     frame .t2.t.f -width 300 -height 50 -bd 2 -relief raised
  2745.     .t2.t window create 1.1 -window .t2.t.f
  2746.     update
  2747.     .t2.t xview scroll 200 units
  2748.     update
  2749.     list [.t2.t xview] [winfo geom .t2.t.f] [.t2.t bbox 1.3]
  2750. } {{0.536667 1} 300x50+-156+18 {}}
  2751.  
  2752. foreach i [winfo children .] {
  2753.     catch {destroy $i}
  2754. }
  2755. concat {}
  2756.